Camera Software Changes#

TSC_EDGE_OUT Signal#

Target Changes

Backward Compatible

Platform

OS

The precision of TSC_EDGE_OUT signal changed from 32ns in Orin to 1ns in Thor.

Yes, because the software uses the different precision internally based on the chip information

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Hardware architecture changes in Thor

Steps to Migrate

  1. Understand the precision of TSC_EDGE_OUT tick to convert TSC tick to the absolute time value (such as nanosecond, seconds, and so on).

  2. The change does not result in API changes; no extra steps are required.

SIPL Core Library#

Target Changes

Backward Compatible

Platform

OS

The SIPL Core library (libnvsipl.so) is partitioned into two libraries: libnvsipl_core.so and libsipl_pipeline.so. The latter is referred to as the “SIPL Pipeline HAL” library.

No. The symbols exported by the SIPL Core library have changed.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Support expanded Camera HW configurations on DOS 7.2

Steps to Migrate

Regenerate all SIPL application and driver binaries

MAX_CAMERAMODULES_PER_BLOCK#

Target Changes

Backward Compatible

Platform

OS

The value of MAX_CAMERAMODULES_PER_BLOCK is increased from 4 to 8.

No. The value of the constant must be the same in all binaries.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Support expanded Camera HW configurations on DOS 7.2

Steps to Migrate

Regenerate all SIPL application and driver binaries

MAX_DEVGRP_NTFNS_PER_INTR#

Target Changes

Backward Compatible

Platform

OS

The value of MAX_DEVGRP_NTFNS_PER_INTR increased from 8 to 16 in release 7.2.4.0

No. The value of the constant must be the same in all binaries

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

  • Thor to Thor

Migration Release Path

7.0 to 7.2 6.x to 7.x

Migration Rationale

To support granular Camera runtime error notifications specifically from power load switch on DOS 7.2, such as Overvolatage, Undervoltage, Overcurrent, Thermal Shutdown, and so on

Steps to Migrate

Update all SIPL applications and driver binaries to use the new value of the constant from DOS 7.2 SIPL public headers

Struct Fields#

Target Changes

Backward Compatible

Platform

OS

Struct ImageMetaData added fields: NvSiplISPDeadPixelCorrectionStatsData deadPixelStats, and bool deadPixelStatsValid

Struct ImageMetaData updated fields: bool histogramStatsValid, NvSiplISPHistogramStatsData histogramStats, NvSiplISPHistogramStats histogramSettings. All going from 2 -> 3 array elements.”

Yes

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Hardware architecture changes in Thor

Steps to Migrate

A new token is defined for Thor instead of the Orin TSEC token

Multi-frame Pipeline Context Support#

Target Changes

Backward Compatible

Platform

OS

  • Multi-frame pipeline context support has been added to DOS 7.2:

    • The DevBlkCDIFrameCtxID attribute is added to the following preexisting data structures: DevBlkCDIEmbeddedDataInfo,

    • INvSIPLClient::ImageMetaData and SiplControlEmbedInfo

    • Change SiplControlAutoSensorSetting::illuminationControl attribute from scalar to an array of size DEVBLK_CDI_MAX_SENSOR_CONTEXTS

    • Add SiplControlAutoSensorSetting::SiplControlAutoSensorSetting attribute of array type DevBlkCDIFrameCtxID

    • Change DevBlkCDISensorControl::illuminationControl attribute from scalar to an array of size DEVBLK_CDI_MAX_SENSOR_CONTEXTS

    • Add DevBlkCDISensorControl::multiCtxIDControl attribute of array type DevBlkCDIFrameCtxID

Yes

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Support expanded Camera HW configurations on DOS 7.2

Steps to Migrate

  1. For non-multi-context pipelines, DevBlkCDISensorControl::numSensorContexts is set to 1.

  2. If SiplControlAutoSensorSetting::illuminationControl is currently set as a scalar value, refer to it as index 0 of the new array.

  3. If DevBlkCDISensorControl::illuminationControl is currently set as a scalar value, refer to it as index 0 of the new array.

  4. Regenerate all SIPL application and driver binaries.

Buffer Surface Formats#

Target Changes

Backward Compatible

Platform

OS

  • Support for additional buffer surface formats is added to support additional camera architectures in DOS 7.x

  • INvSIPLCamera::RegisterImages() performs a check on the surface type of attributes, and rejects unsupported surface types on Thor

  • New surface types:

    • NVSIPL_ST_RGB_UINT8_PL, NVSIPL_ST_RGB_UINT8_BL

    • NVSIPL_ST_BGR_UINT8_PL, NVSIPL_ST_BGR_UINT8_BL

    • NVSIPL_ST_LUMA_UINT8_BL, NVSIPL_ST_LUMA_UINT8_PL

    • NVSIPL_ST_YVU_420SP_UINT8_BL, NVSIPL_ST_YVU_420SP_UINT8_PL

    • NVSIPL_ST_LUMA_UINT10_BL, NVSIPL_ST_LUMA_UINT10_PL

    • NVSIPL_ST_UYVY_422_UINT8_BL

    • NVSIPL_ST_VYUY_422_UINT8_BL

    • NVSIPL_ST_YUV_420SP_UINT10_BL, NVSIPL_ST_YUV_420SP_UINT10_PL

    • NVSIPL_ST_YUV_422SP_UINT10_BL

    • NVSIPL_ST_YUV_422SP_UINT8_BL

    • NVSIPL_ST_YUYV_422_UINT8_BL

    • NVSIPL_ST_YVU_420SP_UINT10_BL, NVSIPL_ST_YVU_420SP_UINT10_PL

    • NVSIPL_ST_YVYU_422_UINT8_BL

    • NVSIPL_ST_UYVY_422_UINT10_BL, NVSIPL_ST_UYVY_422_UINT10_PL

    • NVSIPL_ST_VYUY_422_UINT10_BL, NVSIPL_ST_VYUY_422_UINT10_PL

    • NVSIPL_ST_YUYV_422_UINT10_BL, NVSIPL_ST_YUYV_422_UINT10_PL

    • NVSIPL_ST_YVYU_422_UINT10_BL, NVSIPL_ST_YVYU_422_UINT10_PL

  • Other new attributes:

    • NvSiplBitsPerPixel::NVSIPL_BITS_PER_PIXEL_24

    • NVSIPL_PIXEL_ORDER_RGB for red-green-blue pixel ordering (LSB to MSB)

    • NVSIPL_PIXEL_ORDER_BGR for blue-green-red (LSB to MSB)

Yes

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

Support additional Camera architectures on DOS 7.2

Steps to Migrate

Regenerate all SIPL application and driver binaries

API Deprecation and Removal#

Target Changes

Backward Compatible

Platform

OS

Starting in DriveOS 7.2.4.0, the following deprecated Camera Core APIs is removed:

NvSIPLClient.hpp - ImageMetaData structure fields:

  • badPixelStatsValid

  • badPixelStats

  • badPixelSettings

  • deadPixelStatsValid

  • deadPixelStats

  • histogramStatsValid[3]

  • histogramStats[3]

  • histogramSettings[3]

  • localAvgClipStatsValid[2]

  • localAvgClipStats[2]

  • localAvgClipSettings[2]

NvSIPLPipelineMgr.hpp - NotificationType enum values:

  • NOTIF_INFO_ISP_PROCESSING_DONE

  • NOTIF_INFO_ACP_PROCESSING_DONE

Sample metadata printers must stop reading ISP-statistics and auto-control fields removed from ImageMetaData.

No - applications will fail to compile

NSR, SR

Linux and QNX

Migration Path

  • Dimensity C-X1 to Dimensity C-X1

  • Orin to Thor

Migration Release Path

  • DriveOS 7.2.4.0 and later

  • 6.5.4.2 to 7.2.5.0

Migration Rationale

API cleanup and consolidation to improve maintainability and provide better ISP statistics interface

Steps to Migrate

  1. NvSIPLClient.hpp: Replace all deprecated ImageMetaData ISP statistics fields with IspStatsInfo interface and INvSIPLISPStatCustomInterface::GetIspStatsInfo() method.

  2. NvSIPLPipelineMgr.hpp: Stop using NOTIF_INFO_ISP_PROCESSING_DONE and NOTIF_INFO_ACP_PROCESSING_DONE events.

Restoration of NOTIF_INFO_ISP_PROCESSING_DONE and NOTIF_INFO_ACP_PROCESSING_DONE#

Target Changes

Backward Compatible

Platform

OS

In DriveOS 7.2.5.0, the following NotificationType enum values in NvSIPLPipelineMgr.hpp that were removed in 7.2.4.0 are added back:

  • NOTIF_INFO_ISP_PROCESSING_DONE

  • NOTIF_INFO_ACP_PROCESSING_DONE

Yes

NSR, SR

Linux and QNX

Migration Path

  • Dimensity C-X1 to Dimensity C-X1

Migration Release Path

  • DriveOS 7.2.5.0 and later

Migration Rationale

These notification types were removed in 7.2.4.0 as part of an API cleanup but are restored in 7.2.5.0 to maintain compatibility with applications that depend on ISP and ACP processing-done notifications.

Steps to Migrate

Applications that removed usage of NOTIF_INFO_ISP_PROCESSING_DONE and NOTIF_INFO_ACP_PROCESSING_DONE in response to the 7.2.4.0 removal may re-adopt these notification types when building against DriveOS 7.2.5.0 or later headers.

Support for Multi-camera Error Monitoring and Reporting#

Target Changes

Backward Compatible

Platform

OS

Starting in DOS 7.2.4.0, a polling loop is introduced, once the system reports an error notification, to ensure monitoring of other cameras that are not in the fault state and report their transitions. * interrupt_utils.hpp: To ensure a certain camera device driver does not report the same notification when polled in the fault state, new APIs are added that skip adding duplicate notifications to the queue * NvSIPLPipelineMgr.hpp: New pipeline notification type NOTIF_ERROR_INTR_RECOVERY is added to signal the interrupt recovery and the transition out of polling loop at the device block level * NvSIPLInterrupts.hpp: Interrupt code relevant to the interrupt recovery notification is added. * IInterruptStatus.hpp: A new API resets the duplicate notification array - IInterruptStatus::ResetInterruptNotifications()

Yes

NSR, SR

Linux and QNX

Migration Path

  • DriveOS 7.2.4.0 and later

  • Dimensity C-X1 to Dimensity C-X1

Migration Rationale

Support multi-camera error monitoring and reporting while addressing the known hardware limitation of multiple interrupt signals muxed to single interrupt pin.

Steps to Migrate

  1. Client application to expect new pipeline notification based on NOTIF_ERROR_INTR_RECOVERY type, when all cameras on a device block are recovered (not in fault state).

  2. Custom Camera Device Drivers to use the new *SkipDuplicate() API from interrupt_utils.hpp to ensure the polling loop does not overwhelm the application with multiple notifications.

  3. Custom Camera Device Drivers to implement ResetInterruptNotifications() for classes derived from CNvMCameraModule and CNvMDeserializer to report notifications after recovery.

Parallel Auto Control Plugin Registration#

Target Changes

Backward Compatible

Platform

OS

Starting in DOS 7.2.4.0, INvSIPLCamera::RegisterAutoControlPlugin() is now thread-safe for different index values, enabling parallel registration of auto control plugins across pipelines.

  • NvSIPLCamera.hpp: Thread-safety annotation for RegisterAutoControlPlugin() updated from “No” to “Yes, for different index values” (both overloads)

  • INvMSensorPipeline.hpp: Thread-safety annotation for RegisterAutoControlPlugin() updated from “No” to “Yes, for different pipeline instances” (both overloads)

  • CNvMCamera.hpp: Internal m_inFaultState member changed from bool to std::atomic<bool> to support concurrent access

Yes. The API signatures are unchanged; only thread-safety guarantees are broadened.

NSR, SR

Linux and QNX

Migration Path

  • DriveOS 7.2.4.0 and later

    • Dimensity C-X1 to Dimensity C-X1

Migration Rationale

Reduce camera boot time by allowing auto control plugin registration to run concurrently across pipelines instead of sequentially.

Steps to Migrate

  1. No code changes are required for existing applications. Sequential calls to RegisterAutoControlPlugin() continue to work as before. To leverage parallel registration, call RegisterAutoControlPlugin() concurrently for different pipeline indices (for example, via std::async). Each call must use a distinct index value; concurrent calls with the same index are not supported.

Applies to NVIDIA DriveOS for Dimensity Only#

Pipeline HAL implementations of INvMSensorPipeline::RegisterAutoControlPlugin() must be thread-safe in 7.2.4.0, as SIPL Core may now invoke them concurrently for different pipeline instances.

Parallel Pipeline Initialization#

Applies to NVIDIA DriveOS for Dimensity Only#

Target Changes

Backward Compatible

Platform

OS

Starting in DOS 7.2.4.0, SIPL pipeline initialization is parallelized with device block initialization to reduce camera startup latency.

  • INvMSensorPipeline.hpp: New split initialization API:

    • ChannelInitParams struct for config-based channel init

    • ControlInitParams struct for runtime sensor control init

    • InitChannelPlane() method initializes capture and processing channels in parallel with device block Init()

    • InitControlPlane() method completes sensor control, authentication, and thread initialization after device block Init()

    • Default implementations return NVSIPL_STATUS_NOT_SUPPORTED for legacy fallback

  • NvSIPLDeviceBlock.hpp: GetProperty() can now be called at CONFIG_SET state (after SetConfig(), before Init()) to return config-based capture settings; previously required INIT_DONE state

Yes. The monolithic Init() path is preserved as a fallback. Pipelines that do not override the new split methods will continue to use the existing Init() path with no changes required.

NSR, SR

Linux and QNX

Release Migration Path

  • DriveOS 7.2.4.0 and later

  • Dimensity C-X1 to Dimensity C-X1

Migration Rationale

Reduce camera initialization latency by running capture and processing channel setup in parallel with device block hardware initialization, rather than sequentially.

Steps to Migrate

  1. No code changes are required, but Pipeline HALs must be recompiled against the new headers in 7.2.4.0. The existing monolithic Init() path continues to work. The split initialization is handled internally by SIPL Core.

  2. Custom sensor pipeline implementations (classes deriving from INvMSensorPipeline): To opt in to parallel initialization, override InitChannelPlane() and InitControlPlane() instead of returning NVSIPL_STATUS_NOT_SUPPORTED. If not overridden, the legacy Init() path is used automatically.

  3. GetProperty() callers: GetProperty() can now be called after SetConfig() for early access to config-based properties (capture settings, virtual channel config). Note that sensorControlHandle and crypto key fields are only populated after Init().

The INvSIPLCamera::GetPipelineInterfaceProvider API#

Target Changes

Backward Compatible

Platform

OS

The INvSIPLCamera::GetPipelineInterfaceProvider() API is added in DriveOS 7.0 to provide clients with a way to interface directlywith the SOC-specific SIPL Pipeline HAL. This is meant for proprietary configuration and extensions that are not suitable to be extended in common APIs.

Yes

NSR

SR

Linux and QNX

Migration Path

  • DOS 7.0 and later

Migration Rationale

Support SOC-specific extensions for their SIPL Pipeline HAL without necessitating modifications to the common SIPL Public API.

Steps to Migrate

Regenerate all SIPL application and driver binaries

The SIPL Device Block CDI I2C Address Manager for Linux#

Target Changes

Backward Compatible

Platform

OS

The SIPL Device Block CDI I2C Address Manager for Linux has adopted the DOS 6.x Device Tree-based physical and virtual address pool schema. Furthermore, deserializers may now share an I2C bus as long as they are specified with different CSI ports in the Device Tree configuration.

Yes

NSR

SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Rationale

This unifies Linux and QNX I2C address assignment schemes, and is necessary to support certain unconventional hardware platform I2C bus topologies.

Steps to Migrate

  1. Refer to “The I2C Address Pool” section in the NVIDIA DriveOS Developer Guide to add i2c-addrs-phys and i2c-addrs-virt pools under the /sipl_devblk_<i2c_bus>/i2c_addr_pools Device Tree node. List the physical addresses of the I2C devices attached to the bus directly or indirectly (such as on a Camera Module behind a SERDES) in i2c-addrs-phys. List the remapped addresses of I2C devices in i2c-addrs-virt.

  2. In the SIPL Platform Configuration, set i2cAddress to the real I2C address for all devices and set virtualI2CAddress for devices with remapped addresses.

New SIPL Pipeline Notification Types#

Target Changes

Backward Compatible

Platform

OS

Starting in DOS 7.2.5.0, two new NotificationType values are added in NvSIPLPipelineMgr.hpp to enable finer-grained error reporting at the pipeline level:

  • NOTIF_WARN_DEVICE_BLOCK_ERROR_INTR_DETECTED (225) - Early warning issued when the SIPL device block detects an error interrupt, before per-device interrupt status is decoded and reported. Provides applications an early signal to begin error handling preparation.

  • NOTIF_ERROR_POWER_LOAD_SWITCH_FAILURE (226) - Reports a power load switch failure or error on the device block.

No. The new enum values are additive at the ABI/compilation layer, so existing client applications continue to compile against the new headers. However, applications that previously relied on other notification types to surface these errors will not receive the new notifications until handlers for the new NotificationType values are added. For NOTIF_ERROR_POWER_LOAD_SWITCH_FAILURE no prior notification covered this error category; applications must add a handler to receive these events.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

  • Thor to Thor

Migration Release Path

DriveOS 7.2.5.0 and later

Migration Rationale

To support granular error reporting from the SIPL device block, including an early-warning notification when an error interrupt is first detected, and a dedicated notification for power load switch failures.

Steps to Migrate

  1. Update client applications to handle the new NOTIF_WARN_DEVICE_BLOCK_ERROR_INTR_DETECTED and NOTIF_ERROR_POWER_LOAD_SWITCH_FAILURE events in the NotificationData callback.

  2. Refer to the API Reference for the fields in NotificationData that are valid for each new notification type.

  3. Regenerate all SIPL application binaries against DOS 7.2.5.0 SIPL public headers.

CryptoKeyInfo cryptoChanLabel Support#

Each sensor requires a crypto configuration to perform module authentication and data/control path integrity checking. The configuration is provided to the Camera stack through the CryptoKeyInfo data structure in NvSIPLDeviceBlockInfo.hpp. Applications can configure it either with a static array or via constructors. Refer to the SDK for crypto configuration usage.

Starting with the DriveOS 7.2.5.0 release, the crypto configuration supports both cryptoChanLabel (string) and cryptoChanID (uint32_t). In future releases (7.3.0), only cryptoChanLabel (string) will be supported.

Target Changes

Backward Compatible

Platform

OS

Starting in DriveOS 7.2.5.0, the CryptoKeyInfo class in NvSIPLDeviceBlockInfo.hpp adds:

  • std::string cryptoChanLabel member — a human-readable label sourced from the label property of the platform device tree node (for example, "NV_Camera_DRV_GMAC_0", "NV_Camera_PRK_GMAC_0", "NV_Camera_OMS_HMAC_0")

  • New constructor: CryptoKeyInfo(std::string const &purpose, std::string const &name, std::string const &chanLabel)

  • New accessor: std::string const &chanLabel() const noexcept

The existing uint32_t-based constructor and chanID() accessor are retained for backward compatibility in this release. The existing constructor is modified to also initialize cryptoChanLabel("").

Yes

NSR, SR

Linux and QNX

Existing Class (prior to 7.2.5.0)

class CryptoKeyInfo {
    /**
     * @brief Holds a purpose of the key. Supported purposes are specific
     * to sensor model.
     */
    std::string keyPurpose;
    /**
     * @brief Holds the name of a key.
     */
    std::string keyName;
    /**
     * @brief Numeric ID of a crypto channel which must be used for all
     * operations using the key.
     * Valid value: [Channel ID as defined in the platform device tree]
     */
    uint32_t cryptoChanID;
};

Existing Constructor

CryptoKeyInfo(std::string const &purpose,
              std::string const &name,
              uint32_t const chanID):
    keyPurpose(purpose), keyName(name), cryptoChanID(chanID) { };

Existing API

uint32_t chanID() const noexcept { return cryptoChanID; };

Modified Class (DriveOS 7.2.5.0)

class CryptoKeyInfo {
    /**
     * @brief Holds a purpose of the key. Supported purposes are specific
     * to sensor model.
     */
    std::string keyPurpose;
    /**
     * @brief Holds the name of a key.
     */
    std::string keyName;
    /**
     * @brief Numeric ID of a crypto channel which must be used for all
     * operations using the key.
     * Valid value: [Channel ID as defined in the platform device tree]
     */
    uint32_t cryptoChanID;
    /**
     * @brief Human-readable label of the crypto channel, sourced from
     * the DT node 'label' property.
     * Examples: "NV_Camera_DRV_GMAC_0", "NV_Camera_PRK_GMAC_0",
     *           "NV_Camera_OMS_HMAC_0"
     */
    std::string cryptoChanLabel;
};

Constructors (both available in 7.2.5.0)

// Existing constructor — modified to also initialize cryptoChanLabel("")
CryptoKeyInfo(std::string const &purpose,
              std::string const &name,
              uint32_t const chanID):
    keyPurpose(purpose), keyName(name),
    cryptoChanID(chanID), cryptoChanLabel("") { };

// New constructor
CryptoKeyInfo(std::string const &purpose,
              std::string const &name,
              std::string const &chanLabel):
    keyPurpose(purpose), keyName(name),
    cryptoChanID(0U), cryptoChanLabel(chanLabel) { };

New API

std::string const &chanLabel() const noexcept { return cryptoChanLabel; };

Migration Path

  • DriveOS 7.2.5.0 and later

Migration Rationale

Refer to SHR DOS-SHR-12533: Centralized crypto configuration defined in the device tree for all SE clients.

cryptoChanID is a numeric IVC channel ID that varies per SoC depending on the number of IVC channels exposed by the SE engines available on the SoC. As a result, the application must update the crypto configuration to match the underlying SoC each time it changes. Instead of updating IVC channel IDs for each new SoC configuration, the readable cryptoChanLabel mechanism allows the application to use the same label regardless of underlying SoC changes.

Impact if Not Migrated

The application must refer to the IVC config device tree and configure cryptoChanID for every SoC. If the application configures the wrong IVC config ID, camera authentication performance will be degraded and will not meet expectations.

Steps to Migrate

  1. Update NvSIPLDeviceBlockInfo.hpp to the DriveOS 7.2.5.0 version and recompile all SIPL application and driver binaries.

  2. Existing uint32_t-based CryptoKeyInfo configurations continue to work unchanged — no immediate code changes are required.

  3. To adopt the new label-based configuration, replace:

    CryptoKeyInfo(purpose, name, chanID)
    

    with:

    CryptoKeyInfo(purpose, name, chanLabel)
    

    where chanLabel is the label property from the platform device tree node (for example, "NV_Camera_DRV_GMAC_0").

Implementation Reference

Gerrit change in progress: sipl: Auth Centralized IVC Config (CL 3584404).

CryptoKeyInfo cryptoChanID Removal#

In the DriveOS 7.3.0 release, support for specifying a crypto channel by numeric ID is removed. Channels must be specified by their label. Applications that previously used channel IDs will have to be changed to use channel labels.

Target Changes

Backward Compatible

Platform

OS

Starting in DriveOS 7.3.0, the following are removed from CryptoKeyInfo in NvSIPLDeviceBlockInfo.hpp:

  • uint32_t cryptoChanID member

  • uint32_t-based constructor: CryptoKeyInfo(std::string const &purpose, std::string const &name, uint32_t const chanID)

  • chanID() accessor: uint32_t chanID() const noexcept

The remaining cryptoChanLabel-based constructor is also updated to drop the now-obsolete cryptoChanID(0U) initializer. Only cryptoChanLabel-based configuration is supported from this release onwards.

No. Applications using the uint32_t-based constructor or chanID() will fail to compile.

NSR, SR

Linux and QNX

Modified Class (DriveOS 7.3.0)

class CryptoKeyInfo {
    /**
     * @brief Holds a purpose of the key. Supported purposes are specific
     * to sensor model.
     */
    std::string keyPurpose;
    /**
     * @brief Holds the name of a key.
     */
    std::string keyName;
    /**
     * @brief Human-readable label of the crypto channel, sourced from
     * the DT node 'label' property.
     * Examples: "NV_Camera_DRV_GMAC_0", "NV_Camera_PRK_GMAC_0",
     *           "NV_Camera_OMS_HMAC_0"
     */
    std::string cryptoChanLabel;
};

Removed Constructor

CryptoKeyInfo(std::string const &purpose,
              std::string const &name,
              uint32_t const chanID):
    keyPurpose(purpose), keyName(name),
    cryptoChanID(chanID), cryptoChanLabel("") { };

Remaining Constructor (updated — ``cryptoChanID(0U)`` initializer removed)

CryptoKeyInfo(std::string const &purpose,
              std::string const &name,
              std::string const &chanLabel):
    keyPurpose(purpose), keyName(name),
    cryptoChanLabel(chanLabel) { };

Removed API

uint32_t chanID() const noexcept { return cryptoChanID; };

Remaining API

std::string const &chanLabel() const noexcept { return cryptoChanLabel; };

Migration Path

  • DriveOS 7.3.0 and later

Migration Rationale

Completes the transition described in SHR DOS-SHR-12533 from numeric IVC channel IDs to device-tree label-based crypto channel configuration. Using labels ensures the same crypto configuration works across different SoCs without modification.

Steps to Migrate

  1. Replace all CryptoKeyInfo(purpose, name, chanID) calls with CryptoKeyInfo(purpose, name, chanLabel), where chanLabel is the label property from the platform device tree node (for example, "NV_Camera_DRV_GMAC_0", "NV_Camera_PRK_GMAC_0", "NV_Camera_OMS_HMAC_0").

  2. Replace all calls to chanID() with chanLabel().

  3. Recompile all SIPL application and driver binaries.

C-Array to std::array Migration#

Target Changes

Backward Compatible

Platform

OS

  • Many SIPL public structs have had fixed-size C arrays migrated to std::array of the same length and element type. Element types and dimensions are preserved, but pointer-decay and brace-init patterns must be updated.

  • NvSIPLISPStat.hpp: NvSiplISPHistogramStatsData::data, ::excludedCount; NvSiplISPLocalAvgClipStatsROIData::average, ::maskedOffCount, ::clippedCount; NvSiplISPRadialTF::controlPoints; NvSiplISPHistogramStats::knees, ::ranges; NvSiplISPLocalAvgClipStatsData::data; NvSiplISPLocalAvgClipStats::min, ::max, ::roiEnable, ::windows, ::ellipticalMaskEnable; NvSiplISPHistogramStatsOverride::knees, ::ranges; NvSIPLIspStatsOverrideSetting::enableHistStatsOverride, ::histStats, ::enableLacStatsOverride, ::lacStats, ::enableBpStatsOverride, ::bpStats.

  • NvSIPLISPStructs.hpp: NvSiplISPGlobalToneMapInfo::gtmSplineControlPoint; SiplControlAutoIspStats::luminanceCalibrationMatrix, ::ccm.

  • NvSiplControlAutoDef.hpp: SiplControlAutoSensorSetting::exposureControl, ::wbControl (::illuminationControl is a scalar-to-per-context-array change, not a same-shape migration; see Multi-frame Pipeline Context Support above, which also adds ::multiCtxIDControl); SiplControlAutoAwbGain::gain; SiplControlAutoAwbSetting::wbGainTotal, ::ccmMatrix; SiplControlAutoStatsInfo::lacData, ::lacSettings, ::histData, ::histSettings; IspBlcOverrideSettings::pedestal; IspGtmOverrideSettings::ctrlPoints.

  • SiplControlAutoStatsInfo::histData and ::histSettings array sizes also widened from 2 to 3 to expose the new ISP-7 third histogram channel.

  • The new NvIspStatsHeaderInfo statsInfo field is also appended to the affected stats-data structs (see ISP Statistics Custom Interface below).

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Move to std::array everywhere for safer, range-checkable access. The new third histogram channel reflects ISP-7 hardware capability.

Steps to Migrate

  1. Replace pointer-decay or memcpy patterns that take the address of a C-array member with the equivalent .data() form:

    memcpy(dst, src->ccm, sizeof(src->ccm));
    

    becomes:

    memcpy(dst, src->ccm.data(), sizeof(src->ccm));
    
  2. Update brace-initializers and assignments that previously wrote a raw C-array element-by-element; std::array brace-init and operator[] access continue to work.

  3. For SiplControlAutoStatsInfo::histData / histSettings, account for the new index [2] (ISP-7 third histogram channel). Auto-control plugin code that hard-coded the loop bound to 2 must loop to 3.

  4. Note that NvSiplControlAutoDef.hpp and NvSIPLISPStat.hpp now #include <array> directly; relying on transitive includes is no longer necessary.

Strengthened getInstanceInterfaceID Interface Base Contract#

Target Changes

Backward Compatible

Platform

OS

  • The pure-virtual Interface::getInstanceInterfaceID() declared in INvSIPLDeviceInterfaceProvider.hpp is now const noexcept. Every subclass that overrides it must add the matching const noexcept override qualifiers.

  • In-tree custom interfaces updated to match the new contract: IMX623CustomInterface::getInstanceInterfaceID, IMX728CustomInterface::getInstanceInterfaceID, MAX96712FusaNvCustomInterface::getInstanceInterfaceID, OvtDefaultCustomInterface::getInstanceInterfaceID, OvtSDRMonoRX0CustomInterface::getInstanceInterfaceID, OvtSDRRGBIrRX0CustomInterface::getInstanceInterfaceID, OvtHDRBayerRX0CustomInterface::getInstanceInterfaceID.

  • Out-of-tree custom-interface providers (subclasses of Interface) must follow the same change.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

The method must not modify state and must not throw. The base contract is strengthened to enforce this; the safety-classification work requires a const noexcept declaration.

Steps to Migrate

  1. In every subclass of Interface, change the override signature.

    Before:

    const UUID &getInstanceInterfaceID() override { return MY_ID; }
    

    After:

    const UUID &getInstanceInterfaceID() const noexcept override { return MY_ID; }
    
  2. Compile-time signal of this break: non-virtual member function marked 'override' hides virtual member function.

noexcept and const Tightening on Virtual Methods#

Target Changes

Backward Compatible

Platform

OS

  • IInterruptStatus::GetInterruptStatus() is now noexcept. Subclass overrides without noexcept no longer override correctly under C++17 strict-noexcept-override checking.

  • IMX728CustomInterface::TPS650332ExecuteABIST, ::TPS650332GetErrorInfo and ::TPS650332GetnINTErrorStatus are now declared noexcept. Subclass overrides must add the noexcept specifier.

  • IMX728CustomInterface::WriteTempHistToEEPROM is now declared const. Subclass overrides must add the const qualifier; non-const implementations no longer override the base.

  • INvSIPLCamera::GetImageAttributes third parameter changed from NvSciBufAttrList &imageAttr to NvSciBufAttrList const &imageAttr – the attribute list is now passed by const-reference.

  • INvSIPLBuffer::AddNvSciSyncPrefence parameter qualifier order changed from const NvSciSyncFence & to NvSciSyncFence const & (semantics unchanged; subclass overrides must update their signature for override matching).

No. Source changes are required.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Tighten exception specifications, const-ness, and parameter qualifiers on the polling-interrupt, PMIC error-handling, image-attribute, and prefence paths to align with the v7.2 safety classification work.

Steps to Migrate

  1. For IInterruptStatus::GetInterruptStatus, add noexcept on the override:

    SIPLStatus GetInterruptStatus(uint32_t const gpioIdx,
                                  std::array<...> &intrNtfns) const noexcept override;
    

    Compile-time signal of this break: exception specification of overriding function is more lax than base version.

  2. For TPS650332ExecuteABIST / TPS650332GetErrorInfo / TPS650332GetnINTErrorStatus, add noexcept to the override signature.

  3. For WriteTempHistToEEPROM, add the const qualifier.

    Before:

    SIPLStatus WriteTempHistToEEPROM(uint32_t const len, uint8_t const * const b) override;
    

    After:

    SIPLStatus WriteTempHistToEEPROM(uint32_t const len, uint8_t const * const b) const override;
    
  4. For GetImageAttributes overrides, change the third parameter to NvSciBufAttrList const &imageAttr.

    Compile-time signal of this break: non-const lvalue reference to type 'NvSciBufAttrList' cannot bind to 'const NvSciBufAttrList'.

  5. For AddNvSciSyncPrefence overrides, switch the parameter qualifier order to east-const (NvSciSyncFence const &prefence).

MAX96724 FuSa Custom Interface (New Header)#

Target Changes

Backward Compatible

Platform

OS

New public header MAX96724_Fusa_nv_CustomInterface.hpp is added. It defines the FuSa custom interface for the MAX96724 deserializer, analogous to the existing MAX96712 FuSa custom interface.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Add support for the MAX96724 deserializer family.

Steps to Migrate

  1. Customers integrating MAX96724 deserializers should include the new header:

    #include "MAX96724_Fusa_nv_CustomInterface.hpp"
    

MAX96792A Custom Interface (New Header)#

Target Changes

Backward Compatible

Platform

OS

New public header MAX96792A_CustomInterface.hpp is added. It defines the custom interface for the MAX96792A deserializer.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Add support for the MAX96792A deserializer.

Steps to Migrate

  1. Customers integrating MAX96792A deserializers should include the new header:

    #include "MAX96792A_CustomInterface.hpp"
    

Camera HAL Platform Configuration (NvSIPLCameraTypes.hpp)#

Target Changes

Backward Compatible

Platform

OS

  • New public header NvSIPLCameraTypes.hpp defines sensorconfig::SensorSystemConfig and the related types used by the new Camera-HAL-based platform-configuration model. NvSIPLCamera.hpp now includes this header.

  • New INvSIPLCamera::SetPlatformCfg() overload accepting a sensorconfig::SensorSystemConfig const & is added. This overload uses Camera HAL to handle transport-to-module matching for both GMSL and Camera-over-Ethernet (COE) camera systems. Returns NVSIPL_STATUS_NOT_SUPPORTED if Camera HAL is not compiled in.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Camera HAL based platform configuration enables the COE (Camera over Ethernet) path and unified module / transport matching in a single API.

Steps to Migrate

Customers integrating Camera HAL workflows or COE camera systems should adopt the new overload:

#include "NvSIPLCameraTypes.hpp"

sensorconfig::SensorSystemConfig cfg = ...;
camera->SetPlatformCfg(cfg);

ISP Statistics Custom Interface (INvSIPLISPStatCustomInterface.hpp)#

Target Changes

Backward Compatible

Platform

OS

  • New public header INvSIPLISPStatCustomInterface.hpp defines the custom-interface entry point through which callers consume ISP statistics, replacing the in-line stats fields removed from INvSIPLClient::ImageMetaData.

  • The following new public structs are added in NvSIPLISPStat.hpp:

    • NvIspStatsHeaderInfo – carries StreamID / FrameID / ProgramID per stats buffer (ProgramID only valid on ISP-7).

    • NvSiplISPDeadPixelCorrectionStatsROIData and NvSiplISPDeadPixelCorrectionStatsData – carry ISP-7 dead-pixel-correction stats (inside and outside ROI) plus a header.

    • IspStatsSettings, IspStatsData, IspStatsInfo – container structs that aggregate hist (3), LAC (2) and BP / DP stats data and settings for one frame.

  • The new NvIspStatsHeaderInfo statsInfo field is also appended to NvSiplISPHistogramStatsData and NvSiplISPLocalAvgClipStatsROIData.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Decouple ISP statistics from per-frame ImageMetaData so that stats can be delivered through a dedicated, versionable container without bloating every captured frame’s metadata. Add ISP-7 dead-pixel-correction stats reporting.

Steps to Migrate

  1. Replace direct reads of ISP-stats fields off ImageMetaData with the new IspStatsInfo plumbing:

    #include "INvSIPLISPStatCustomInterface.hpp"
    // Use the new custom interface to obtain IspStatsInfo.
    
    IspStatsInfo info;
    // Populated by the SIPL stats-delivery path.
    NvSiplISPHistogramStatsData const &h = info.ispStatsData.histStatsData[0];
    
  2. Use NvIspStatsHeaderInfo statsInfo on each stats-data struct to correlate stats with the originating stream / frame / program ID.

typedef-struct / typedef-enum to Named Declarations#

Target Changes

Backward Compatible

Platform

OS

  • Multiple anonymous typedef enum and struct declarations have been converted to named enum / struct declarations. Type names are unchanged, but C consumers must add the struct / enum keyword where the typedef previously made it optional. C++ consumers are unaffected.

  • Affected enums / structs:

    • NvSIPLCamera.hpp: NvSiplNvSciSyncClientType, NvSiplNvSciSyncObjType.

    • NvSIPLCapStructs.h: NvSiplCapInterfaceType, NvSiplCapInputFormatType, NvSiplBitsPerPixel, NvSiplCapCsiPhyMode; struct NvSiplCapInputFormat.

    • NvSIPLISPStat.hpp: NvSiplISPBadPixelStatsData, NvSiplISPHistogramStatsData, NvSiplISPLocalAvgClipStatsROIData, NvSiplISPEllipse, NvSiplISPStatisticsWindows, NvSiplISPSplineControlPoint, NvSiplISPRadialTF, NvSiplISPHistogramStats, NvSiplISPLocalAvgClipStatsData, NvSiplISPLocalAvgClipStats, NvSiplISPBadPixelStats, NvSiplISPHistogramStatsOverride.

    • MAX96712_Fusa_nv_CustomInterface.hpp: DeserializerCSIPLLLockInfo, DeserializerOverflowErrInfo, DeserializerRTFlagsInfo, DeserializerVidSeqErrInfo.

No. Source changes are required. (C consumers only – C++ code is unaffected.)

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Allow forward declaration of these types and align with idiomatic C++. Required by the std::array migration in NvSIPLISPStat.hpp.

Steps to Migrate

  1. C consumers should add the struct or enum keyword where it was previously optional:

    NvSiplCapInputFormat fmt;
    fmt.inputFormatType = NVSIPL_CAP_INPUT_FORMAT_TYPE_RAW12RJ;
    
    struct NvSiplCapInputFormat fmt;  // C requires the 'struct' keyword
    fmt.inputFormatType = NVSIPL_CAP_INPUT_FORMAT_TYPE_RAW12RJ;
    
  2. C++ consumers require no changes.

Removal of GPIO Injected-Interrupt Test Path#

Target Changes

Backward Compatible

Platform

OS

  • The synthetic GPIO interrupt-injection test path has been removed from the public surface:

    • NvSIPLCommon.hpp: NVSIPL_GPIO_EVENT_INTR_INJECTED removed; subsequent enumerators after NVSIPL_GPIO_EVENT_INTR_TIMEOUT are renumbered downward by one.

    • devblk_cdi.h: DEVBLK_CDI_GPIO_EVENT_INTR_INJECTED removed; the remaining enumerators after DEVBLK_CDI_GPIO_EVENT_INTR (value 0) are renumbered downward by one.

    • devblk_cdi.h: DevBlkCDIRootDeviceScheduleGpioINTREvent() removed (used to schedule a delayed GPIO interrupt-injection pulse for testing).

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

The interrupt-injection test path is no longer appropriate for the public SDK surface.

Steps to Migrate

  1. Remove handler cases for the injected-interrupt enumerators.

    Before:

    if (event == NVSIPL_GPIO_EVENT_INTR_INJECTED) { ... }
    case DEVBLK_CDI_GPIO_EVENT_INTR_INJECTED: ... ;
    

    After:

    // Injected-interrupt events are no longer reported; remove these
    // cases from event handlers and rely on real GPIO interrupts only.
    

    Compile-time signal of these breaks: 'NVSIPL_GPIO_EVENT_INTR_INJECTED' was not declared in this scope and 'DEVBLK_CDI_GPIO_EVENT_INTR_INJECTED' undeclared.

  2. Remove any call to DevBlkCDIRootDeviceScheduleGpioINTREvent(); there is no replacement. Compile-time signal: implicit declaration of function 'DevBlkCDIRootDeviceScheduleGpioINTREvent'.

  3. Code that compares GPIO-event values numerically rather than symbolically must be reviewed; the renumbering shifts subsequent values downward by one.

CDI I2C Retry-on-Failure Mechanism#

Target Changes

Backward Compatible

Platform

OS

  • devblk_cdi_i2c.h adds a new opt-in retry-on-failure mechanism for I2C transactions:

    • New macros CDI_I2C_MAX_RETRY_ATTEMPTS (10U) and CDI_I2C_MAX_RETRY_DELAY_US (10000U).

    • New struct DevBlkCDII2CRetryConfig (retryEnabled / maxAttempts / delayUs) supplied by the caller.

    • New struct DevBlkCDII2CRetryInfo (retryAttempted / attemptsMade) reported back to listener callbacks.

    • New API DevBlkCDII2CPgmrSetRetryConfig() configures retry-on-failure parameters for an I2C programmer.

    • Listener-callback typedefs DevBlkCDII2CWriteCb and DevBlkCDII2CReadCb gain an additional final parameter const DevBlkCDII2CRetryInfo *retryInfo. Existing registered callbacks must be updated to match.

  • Behavior contract on DevBlkCDII2CPgmrWriteBlock() / DevBlkCDII2CPgmrWriteBlockVerify() is now explicit: the implementation may transparently split a write into multiple I2C transactions when dataLen exceeds the internal buffer limit. Callers no longer need to chunk data themselves; tests that count on-the-wire transactions must be updated.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Allow opt-in retry of transient I2C failures (commonly seen on noise-prone boards) and surface retry information to listener callbacks for diagnostic and validation purposes.

Steps to Migrate

  1. Update existing DevBlkCDII2CWriteCb / DevBlkCDII2CReadCb listener-callback signatures to take the new trailing retryInfo parameter.

    Before:

    NvMediaStatus myWriteCb(DevBlkCDIDevice const * const h,
                            uint8_t const *data, uint32_t len);
    

    After:

    NvMediaStatus myWriteCb(DevBlkCDIDevice const * const h,
                            uint8_t const *data, uint32_t len,
                            const DevBlkCDII2CRetryInfo *retryInfo);
    

    Compile-time signal of this break: incompatible function pointer types passing 'NvMediaStatus (...)'.

  2. To opt in to retries, configure a DevBlkCDII2CRetryConfig and call DevBlkCDII2CPgmrSetRetryConfig():

    DevBlkCDII2CRetryConfig cfg = {
        .retryEnabled = NVMEDIA_TRUE,
        .maxAttempts  = CDI_I2C_MAX_RETRY_ATTEMPTS,
        .delayUs      = CDI_I2C_MAX_RETRY_DELAY_US,
    };
    DevBlkCDII2CPgmrSetRetryConfig(pgmr, &cfg);
    
  3. Remove caller-side chunking around DevBlkCDII2CPgmrWriteBlock / WriteBlockVerify; the implementation now chunks internally. If counting on-the-wire transactions for diagnostics, update the test logic to expect multiple transactions.

DEVBLK_CDI_I2C_BUS Enumerator Additions#

Target Changes

Backward Compatible

Platform

OS

Five new I2C bus enumerators (DEVBLK_CDI_I2C_BUS_12 through DEVBLK_CDI_I2C_BUS_16) are added to DevBlkCDI_I2CPort in devblk_cdi.h. Existing values are preserved; the DEVBLK_CDI_I2C_SIMULATOR sentinel keeps its 255 value.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Support additional I2C buses on platforms that expose more than 12.

Steps to Migrate

Platforms exposing i2c-12 through i2c-16 may now reference the new enumerators directly:

sensorInfo.i2cPort = DEVBLK_CDI_I2C_BUS_12;

Auto-control Per-Frame Skip Flags Relocation#

Target Changes

Backward Compatible

Platform

OS

The skipAEProcessing and skipAWBProcessing flags have moved out of SiplControlAutoOutputParam and into SiplControlAutoMetadata. The semantics (“skip AE / AWB this frame to improve processing speed”) are unchanged, but the flags are now an input to ISiplControlAuto::Process(), not an output from it.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

These flags describe per-frame processing-control hints rather than auto-control outputs. Placing them on the input metadata aligns with the semantics.

Steps to Migrate

Move the assignments from the output struct to the input metadata.

Before:

outParams.skipAEProcessing  = true;
outParams.skipAWBProcessing = true;

After:

inParams.autoMetadata.skipAEProcessing  = true;
inParams.autoMetadata.skipAWBProcessing = true;

Compile-time signal of this break: no member named 'skipAEProcessing' in 'SiplControlAutoOutputParam'.

Histogram Knee/Range Override Settings#

Target Changes

Backward Compatible

Platform

OS

IspHistogramOverrideSettings gains three new fields: kneeRangesOverrideEnable (default false); knees and ranges arrays (both std::array<uint8_t, NVSIPL_ISP_HIST_KNEE_POINTS>). When kneeRangesOverrideEnable is true, the supplied arrays override the default histogram-block knee / range values.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Allow auto-control plugins to override histogram knee and range parameters at runtime.

Steps to Migrate

Auto-control plugin clients overriding histogram settings can opt in to the new override:

IspHistogramOverrideSettings s {};
s.kneeRangesOverrideEnable = true;
s.knees  = {/* ... */};
s.ranges = {/* ... */};

DeviceBlockInfo Configuration Changes#

Target Changes

Backward Compatible

Platform

OS

  • Platform-capacity constexpr constants in NvSIPLDeviceBlockInfo.hpp are increased on QNX safety: MAX_DEVICEBLOCKS_PER_PLATFORM 4U -> 5U; MAX_CAMERAMODULES_PER_BLOCK 4U -> 8U. Static arrays sized by these values (e.g. CameraModuleInfo cameraModuleInfoList[MAX_CAMERAMODULES_PER_BLOCK]) grow accordingly, changing struct layout sizes.

  • The DeviceBlockInfo::resilientInit and DeviceBlockInfo::powerOffDevices fields have been removed. Both defaulted to true; the corresponding behavior (retry-on-init, power-off-on-deinit) is now hardwired and no longer customer-configurable.

  • DeviceBlockInfo::cameraModuleInfoList now uses an explicit value initializer (= {}); DeviceBlockInfo::resetAll lost its in-class default {false}. Callers must explicitly initialize resetAll before passing the struct.

No. Persisted data / wire values may differ.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Support additional device blocks and additional camera modules per block on the new platform; remove the configuration that is no longer appropriate to expose.

Steps to Migrate

  1. Replace literal numeric limits with the symbolic constants:

    // Code assuming up to 4 modules per block:
    for (uint32_t i = 0U; i < 4U; ++i) { ... }
    
    // Use the symbolic constants:
    for (uint32_t i = 0U; i < MAX_CAMERAMODULES_PER_BLOCK; ++i) { ... }
    
  2. Remove assignments to DeviceBlockInfo::resilientInit and DeviceBlockInfo::powerOffDevices; consult the release notes for the new fixed behavior. Compile-time signal of this break: no member named 'resilientInit' / 'powerOffDevices' in 'DeviceBlockInfo'.

  3. Explicitly initialize resetAll:

    DeviceBlockInfo dbi;
    dbi.resetAll = false;      // explicit init required
    
  4. Code that persists or wire-serializes structures containing arrays sized by MAX_DEVICEBLOCKS_PER_PLATFORM / MAX_CAMERAMODULES_PER_BLOCK must be regenerated against the new sizes.

SensorInfo and DeserializerInfo Additions#

Target Changes

Backward Compatible

Platform

OS

  • NvSIPLDeviceBlockInfo.hpp: struct UserDefDataTypeCaptureSetting is renamed to UserDefDTCaptureSetting. The corresponding field type VirtualChannelInfo::userDefDTCapSetting references the new name.

  • SensorInfo gains a new vcInfo field (VirtualChannelInfo, marked deprecated in favor of vcInfoList) and a useVcInfoList flag (default false). When useVcInfoList is true, the list-style virtual-channel info (vcInfoList) is consulted instead of the deprecated single-field path.

  • SensorInfo::isAuthEnabled is now visible on Linux as well as QNX; the compile-time guard widened from #ifdef NVMEDIA_QNX to #if defined(NVMEDIA_QNX) || defined(NVMEDIA_LINUX).

  • New scoped enum SerdesDataTransmissionMode (uint8_t) with values PIXEL_MODE = 0U (default) and TUNNELING_MODE = 1U; DeserializerInfo gains a new dataTransmissionMode field (default PIXEL_MODE, preserves prior behavior).

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Multi-virtual-channel sensors require a list rather than a single VirtualChannelInfo; sensor authentication is now available on more Linux variants; tunneling-mode raw-data passthrough is supported between serializer and deserializer.

Steps to Migrate

  1. Rename UserDefDataTypeCaptureSetting declarations to the new shorter name:

    UserDefDataTypeCaptureSetting s {};
    
    UserDefDTCaptureSetting s {};
    

    Compile-time signal of this break: 'UserDefDataTypeCaptureSetting' was not declared in this scope.

  2. For multi-virtual-channel sensors, opt in to the list-style API:

    SensorInfo s;
    s.useVcInfoList = true;
    s.vcInfoList[0] = ...;
    
  3. Linux clients of SIPL who require sensor authentication can now set SensorInfo::isAuthEnabled = true.

  4. To opt in to tunneling-mode transport on the GMSL link:

    DeserializerInfo d;
    d.dataTransmissionMode = SerdesDataTransmissionMode::TUNNELING_MODE;
    

NvSIPLDeviceBlockTrace Tightened#

Target Changes

Backward Compatible

Platform

OS

  • INvSIPLDeviceBlockTrace::TraceLevel changed from an unscoped enum to a scoped enum class. Enumerators are no longer implicitly convertible to integers and must be qualified with the TraceLevel scope.

  • INvSIPLDeviceBlockTrace’s copy / move constructors and copy / move assignment operators are changed from = default to = delete. The class is now non-copyable and non-movable; singleton-style usage via GetInstance() is unaffected.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Stronger typing of trace levels avoids name collision with other LevelXxx symbols in the global scope. Explicitly deleting the copy / move special members enforces correct singleton usage.

Steps to Migrate

  1. Qualify TraceLevel enumerators and explicitly cast when an integer is required.

    Before:

    trace->SetLevel(LevelDebug);
    int n = LevelInfo;
    

    After:

    trace->SetLevel(INvSIPLDeviceBlockTrace::TraceLevel::LevelDebug);
    int n = static_cast<int>(INvSIPLDeviceBlockTrace::TraceLevel::LevelInfo);
    

    Compile-time signal of this break: 'LevelDebug' was not declared in this scope.

  2. Replace any code that copies or moves an INvSIPLDeviceBlockTrace instance with the singleton accessor.

    Before:

    INvSIPLDeviceBlockTrace t = *trace;   // copy
    

    After:

    INvSIPLDeviceBlockTrace *t = INvSIPLDeviceBlockTrace::GetInstance();
    

    Compile-time signal of this break: call to deleted constructor of 'INvSIPLDeviceBlockTrace'.

ImageMetaData Layout Reordering Post-Cleanup#

Target Changes

Backward Compatible

Platform

OS

INvSIPLClient::ImageMetaData::frameCtxIDInfo has been moved to a different position within the struct (now last, after wasFrameDropped). Callers that use designated-initializer style or that depend on raw memcpy / positional initialization must verify their code is unaffected.

No. Persisted data / wire values may differ.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Member reordering after the ISP-stats removal cleanup.

Steps to Migrate

Audit ImageMetaData raw-memcpy or positional-initializer call sites and rewrite them as designated initializers or member assignments.

NotificationData and RawBuffer Virtual-Channel Indexing#

Target Changes

Backward Compatible

Platform

OS

  • NvSIPLPipelineNotifier::NotificationData::virtualChannelId has been renamed to uVcIdx and moved earlier in the struct (just after uIndex). Code referencing virtualChannelId must be updated.

  • NvSIPLImageGroupWriter::RawBuffer gains a new uVcIdx field (virtual-channel index for the captured frame). Custom RawBuffer feeders should set uVcIdx when populating buffers for multi-VC pipelines.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Naming alignment with uIndex and other uXxx fields used elsewhere in NvSIPL notification structures, plus explicit virtual-channel identification for the raw-buffer feeder path so multi-VC sensor configurations can route buffers correctly.

Steps to Migrate

  1. Rename virtualChannelId reads:

    uint32_t vc = data.virtualChannelId;
    
    uint32_t vc = data.uVcIdx;
    

    Compile-time signal of this break: no member named 'virtualChannelId' in 'NotificationData'.

  2. Custom FillRawBuffer implementations should populate RawBuffer::uVcIdx per virtual channel:

    RawBuffer rb;
    rb.uVcIdx = 0U;   // set per virtual channel
    

OVT Module Power-Off Removed#

Target Changes

Backward Compatible

Platform

OS

The OvtDefaultCustomInterface::CameraModulePowerOff() pure-virtual method has been removed from OVTCustomInterface.hpp. OVT module power-off is now handled through the standard SIPL pipeline shutdown rather than a custom-interface call.

No. Source changes are required.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Consolidate module power-off behind the regular pipeline shutdown path; remove the per-module duplicate API.

Steps to Migrate

Remove direct calls and overrides:

Before:

ovtIface->CameraModulePowerOff();

After:

// No replacement; rely on the standard SIPL pipeline shutdown.

Compile-time signal of this break: no member named 'CameraModulePowerOff' in 'OvtDefaultCustomInterface'.

BD868B2 PMIC Types on Safety Builds#

Target Changes

Backward Compatible

Platform

OS

  • BD868B2_CustomData.h: the entire BD868B2 PMIC custom error-info type set (errorInfoTypeBD868B2, BD868B2CustomErrInfo and the related members and trailing static_assert) was previously gated behind #if !defined(NV_IS_SAFETY) || (NV_IS_SAFETY == 0). The guard has been removed; these types are now visible on QNX Safety builds.

  • IMX728_CustomInterface.hpp: the BD868B2 PMIC error-query methods BD868B2GetErrorInfo and BD868B2GetWAROUTBErrorStatus, and the #include "BD868B2_CustomData.h", were previously gated behind #if !(NV_IS_SAFETY). These guards are removed and the methods are now part of the IMX728 custom interface on Safety builds.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

BD868B2 PMIC error-info / diagnostics are required on safety builds.

Steps to Migrate

Customers on QNX Safety using IMX728 modules with BD868B2 PMIC can reference these types and methods directly:

// Safety build: BD868B2CustomErrInfo is now usable.
BD868B2CustomErrInfo info {};

DevBlkCDIFrameSeqNum::frameSeqNumValid Contract Narrowed#

Target Changes

Backward Compatible

Platform

OS

The documented contract of DevBlkCDIFrameSeqNum::frameSeqNumValid is narrowed. Previously this flag indicated that the parsed sequence number passed continuity validation (current == previous + 1, with the first frame exempted). The new contract is “a flag which enables or disables the frame sequence number block” – it no longer asserts continuity. Code that relied on this flag to detect dropped or duplicated frames must implement that check itself.

No. Persisted data / wire values may differ.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

The continuity check previously embedded in this flag conflated “block enabled” with “sequence number valid”. The two concerns are now separated.

Steps to Migrate

Implement an explicit continuity check in client code where one is required (current == previous + 1, with the first frame exempt). Do not rely on frameSeqNumValid for that signal.

IInterruptStatus Helpers (Poll Interval and Equality Operators)#

Target Changes

Backward Compatible

Platform

OS

  • New public constexpr uint32_t ERRMON_INTR_POLL_INTERVAL_MS (= 500U) defines the polling interval (in milliseconds) for the error-monitor interrupt status. Surfaced for callers that sleep or schedule on the same cadence as the error monitor.

  • Equality (==) and inequality (!=) operators added to IInterruptStatus::InterruptNotification, comparing valid, code, gpioIdx and linkMask. Both self and other must have valid == true for equality.

Yes

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Allow direct comparison of interrupt notifications in client code and expose the polling interval as a public constant.

Steps to Migrate

  1. Use the new poll-interval constant when scheduling alongside the error monitor:

    std::this_thread::sleep_for(std::chrono::milliseconds(ERRMON_INTR_POLL_INTERVAL_MS));
    
  2. Use the new comparison operators directly:

    if (notif1 == notif2) { ... }
    

autoCtrlOutputSetting Removed from SiplControlAutoIspStats#

Target Changes

Backward Compatible

Platform

OS

The autoCtrlOutputSetting member has been removed from SiplControlAutoIspStats (in NvSIPLISPStructs.hpp). The equivalent information is now produced via the auto-control output parameter pathway (SiplControlAutoOutputParam::sensorSetting from ISiplControlAuto::Process()).

No. Source changes are required.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Decouple sensor-setting feedback from the stats struct.

Steps to Migrate

Replace reads of the removed member with the auto-control output parameter path.

Before:

SiplControlAutoSensorSetting s = stats.autoCtrlOutputSetting;

After:

// Use SiplControlAutoOutputParam.sensorSetting from the
// ISiplControlAuto::Process() output instead.

Compile-time signal of this break: no member named 'autoCtrlOutputSetting' in 'SiplControlAutoIspStats'.

Migration of C++ toolchain to C++17#

Target Changes

Backward Compatible

Platform

OS

The C++ toolchain is migrated to C++17. * SIPL sample and driver C++ targets must use C++17.

No. Source changes are required.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

To reduce static analysis warnings and compile-time errors, SIPL now uses std::optional and std::variant as part of some file headers; compiling it as C++14 produces a cascade of missing-type errors. Build SIPL C++ targets with C++17.

Steps to Migrate

  1. Replace -std=c++14 with -std=c++17 in: - camera/Makefile - sample/Makefile

  2. Apply the same setting to release-tree query and device-block targets that explicitly force C++14.

Compile-time signal of this break: error: 'variant' in namespace 'std' does not name a template type or error: 'optional' in namespace 'std' does not name a template type.

Deprecation of OV2311 Non-FuSa and OV2311-C Driver/Query Components#

Target Changes

Backward Compatible

Platform

OS

The OV2311 Non-FuSa and OV2311-C driver/query components are deprecated. OV2311 Non-FuSa and OV2311-C files are removed from the 7.2.5.0 release source tree.

No. Source changes are required. Source code that references these components will not compile.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

The OV2311 Non-FuSa and OV2311-C driver/query components are classified as legacy and no longer supported. References to these components from source code will not compile.

Steps to Migrate

  1. Delete these source directories:

    • nvsipl/devblk/cameramodule/MAX96712cameramodule/ov2311/

    • nvsipl/devblk/devblk_new/cameramodule/MAX96712cameramodule/ov2311_c/

  2. Remove references to the OV2311 Non-FuSa and OV2311-C driver/query components from the source code. Specifically, remove the following includes: - #include "OV2311NonFuSaCustomInterface.hpp" - processOV2311CustomCommand() - GetOV2311NonFuSaCustomInterface()

Compile-time signal of this break: fatal error: OV2311NonFuSaCustomInterface.hpp: No such file or directory

Update Deserializer Error APIs to be const#

Target Changes

Backward Compatible

Platform

OS

The base deserializer interface now treats error inspection as const.

No. Source changes are required. Code that calls GetErrorSize() or GetErrorInfo() must be updated to be const.

NSR, SR

Linux and QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

As part of static analysis updates, the base deserializer interface now treats error inspection as const.

Steps to Migrate

  1. In nvsipl/devblk/common/ddi/DeserializerIF/CNvMDeserializer.hpp, change the following code:

    virtual SIPLStatus GetErrorSize(size_t& errorSize) const;
    virtual SIPLStatus GetErrorInfo(std::uint8_t * const buffer,
                                    std::size_t const bufferSize,
                                    std::size_t &size,
                                    bool &isRemoteError,
                                    std::uint8_t &linkErrorMask) const;
    
  2. Update all functions inheriting from CNvMDeserializer::GetErrorSize() and CNvMDeserializer::GetErrorInfo() to be const.

Compile-time signal of this break: undefined reference to nvsipl::CNvMDeserializer::GetErrorSize(unsigned long&).