Camera Software Changes#
TSC_EDGE_OUT Signal#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The precision of |
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
Understand the precision of
TSC_EDGE_OUTtick to convert TSC tick to the absolute time value (such as nanosecond, seconds, and so on).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 ( |
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 |
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 |
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 Struct |
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 |
|---|---|---|---|
|
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
For non-multi-context pipelines,
DevBlkCDISensorControl::numSensorContextsis set to1.If
SiplControlAutoSensorSetting::illuminationControlis currently set as a scalar value, refer to it as index 0 of the new array.If
DevBlkCDISensorControl::illuminationControlis currently set as a scalar value, refer to it as index 0 of the new array.Regenerate all SIPL application and driver binaries.
Buffer Surface Formats#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
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 -
NvSIPLPipelineMgr.hpp -
Sample metadata printers must stop reading ISP-statistics and auto-control fields removed from |
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
NvSIPLClient.hpp: Replace all deprecated
ImageMetaDataISP statistics fields withIspStatsInfointerface andINvSIPLISPStatCustomInterface::GetIspStatsInfo()method.NvSIPLPipelineMgr.hpp: Stop using
NOTIF_INFO_ISP_PROCESSING_DONEandNOTIF_INFO_ACP_PROCESSING_DONEevents.
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
|
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 |
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
Client application to expect new pipeline notification based on
NOTIF_ERROR_INTR_RECOVERYtype, when all cameras on a device block are recovered (not in fault state).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.Custom Camera Device Drivers to implement
ResetInterruptNotifications()for classes derived fromCNvMCameraModuleandCNvMDeserializerto report notifications after recovery.
Parallel Auto Control Plugin Registration#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Starting in DOS 7.2.4.0,
|
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
No code changes are required for existing applications. Sequential calls to
RegisterAutoControlPlugin()continue to work as before. To leverage parallel registration, callRegisterAutoControlPlugin()concurrently for different pipeline indices (for example, viastd::async). Each call must use a distinctindexvalue; concurrent calls with the sameindexare 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.
|
Yes. The monolithic |
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
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.Custom sensor pipeline implementations (classes deriving from
INvMSensorPipeline): To opt in to parallel initialization, overrideInitChannelPlane()andInitControlPlane()instead of returningNVSIPL_STATUS_NOT_SUPPORTED. If not overridden, the legacyInit()path is used automatically.GetProperty() callers:
GetProperty()can now be called afterSetConfig()for early access to config-based properties (capture settings, virtual channel config). Note thatsensorControlHandleand crypto key fields are only populated afterInit().
The INvSIPLCamera::GetPipelineInterfaceProvider API#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The |
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
Refer to “The I2C Address Pool” section in the NVIDIA DriveOS Developer Guide to add
i2c-addrs-physandi2c-addrs-virtpools under the/sipl_devblk_<i2c_bus>/i2c_addr_poolsDevice 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) ini2c-addrs-phys. List the remapped addresses of I2C devices ini2c-addrs-virt.In the SIPL Platform Configuration, set
i2cAddressto the real I2C address for all devices and setvirtualI2CAddressfor devices with remapped addresses.
New SIPL Pipeline Notification Types#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Starting in DOS 7.2.5.0, two new
|
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 |
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
Update client applications to handle the new
NOTIF_WARN_DEVICE_BLOCK_ERROR_INTR_DETECTEDandNOTIF_ERROR_POWER_LOAD_SWITCH_FAILUREevents in theNotificationDatacallback.Refer to the API Reference for the fields in
NotificationDatathat are valid for each new notification type.Regenerate all SIPL application binaries against DOS 7.2.5.0 SIPL public headers.
New SIPL Interrupt Status Codes for Power Load Switch and SerDes Link State#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
Starting in DOS 7.2.5.0, new Power load switch interrupt status codes:
Link-level error reporting:
|
No. The new codes are additive at the ABI level, but customer applications that decode interrupt status must add handling for these new codes. Errors from the power load switch did not have dedicated interrupt status codes prior to DOS 7.2.5.0; applications must add handlers for these codes to receive the corresponding error 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 enable applications to root-cause runtime errors without resorting to custom interfaces. SIPL now reports the exact source and type of power load switch failures (overvoltage, undervoltage, overcurrent, thermal shutdown, line-to-line fault, circuit-open disconnect, incorrect impedance, ISET-open, and input/VDD rail over/undervoltage) directly to applications, alongside SerDes link-level error reporting.
Steps to Migrate
Update client applications consuming interrupt status results to handle the new
InterruptStatuscodes in their interrupt notification processing logic.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
The existing |
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
Update
NvSIPLDeviceBlockInfo.hppto the DriveOS 7.2.5.0 version and recompile all SIPL application and driver binaries.Existing
uint32_t-basedCryptoKeyInfoconfigurations continue to work unchanged — no immediate code changes are required.To adopt the new label-based configuration, replace:
CryptoKeyInfo(purpose, name, chanID)
with:
CryptoKeyInfo(purpose, name, chanLabel)
where
chanLabelis thelabelproperty 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
The remaining |
No. Applications using the |
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
Replace all
CryptoKeyInfo(purpose, name, chanID)calls withCryptoKeyInfo(purpose, name, chanLabel), wherechanLabelis thelabelproperty from the platform device tree node (for example,"NV_Camera_DRV_GMAC_0","NV_Camera_PRK_GMAC_0","NV_Camera_OMS_HMAC_0").Replace all calls to
chanID()withchanLabel().Recompile all SIPL application and driver binaries.
C-Array to std::array Migration#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
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
Replace pointer-decay or
memcpypatterns 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));
Update brace-initializers and assignments that previously wrote a raw C-array element-by-element;
std::arraybrace-init andoperator[]access continue to work.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.Note that
NvSiplControlAutoDef.hppandNvSIPLISPStat.hppnow#include <array>directly; relying on transitive includes is no longer necessary.
Strengthened getInstanceInterfaceID Interface Base Contract#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
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
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; }
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 |
|---|---|---|---|
|
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
For
IInterruptStatus::GetInterruptStatus, addnoexcepton 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.For
TPS650332ExecuteABIST/TPS650332GetErrorInfo/TPS650332GetnINTErrorStatus, addnoexceptto the override signature.For
WriteTempHistToEEPROM, add theconstqualifier.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;
For
GetImageAttributesoverrides, change the third parameter toNvSciBufAttrList const &imageAttr.Compile-time signal of this break:
non-const lvalue reference to type 'NvSciBufAttrList' cannot bind to 'const NvSciBufAttrList'.For
AddNvSciSyncPrefenceoverrides, 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 |
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
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 |
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
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 |
|---|---|---|---|
|
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 |
|---|---|---|---|
|
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
Replace direct reads of ISP-stats fields off
ImageMetaDatawith the newIspStatsInfoplumbing:#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];
Use
NvIspStatsHeaderInfo statsInfoon 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 |
|---|---|---|---|
|
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
C consumers should add the
structorenumkeyword 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;
C++ consumers require no changes.
Removal of GPIO Injected-Interrupt Test Path#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
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
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 scopeand'DEVBLK_CDI_GPIO_EVENT_INTR_INJECTED' undeclared.Remove any call to
DevBlkCDIRootDeviceScheduleGpioINTREvent(); there is no replacement. Compile-time signal:implicit declaration of function 'DevBlkCDIRootDeviceScheduleGpioINTREvent'.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 |
|---|---|---|---|
|
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
Update existing
DevBlkCDII2CWriteCb/DevBlkCDII2CReadCblistener-callback signatures to take the new trailingretryInfoparameter.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 (...)'.To opt in to retries, configure a
DevBlkCDII2CRetryConfigand callDevBlkCDII2CPgmrSetRetryConfig():DevBlkCDII2CRetryConfig cfg = { .retryEnabled = NVMEDIA_TRUE, .maxAttempts = CDI_I2C_MAX_RETRY_ATTEMPTS, .delayUs = CDI_I2C_MAX_RETRY_DELAY_US, }; DevBlkCDII2CPgmrSetRetryConfig(pgmr, &cfg);
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 ( |
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 |
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 |
|---|---|---|---|
|
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 |
|---|---|---|---|
|
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
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) { ... }
Remove assignments to
DeviceBlockInfo::resilientInitandDeviceBlockInfo::powerOffDevices; consult the release notes for the new fixed behavior. Compile-time signal of this break:no member named 'resilientInit' / 'powerOffDevices' in 'DeviceBlockInfo'.Explicitly initialize
resetAll:DeviceBlockInfo dbi; dbi.resetAll = false; // explicit init required
Code that persists or wire-serializes structures containing arrays sized by
MAX_DEVICEBLOCKS_PER_PLATFORM/MAX_CAMERAMODULES_PER_BLOCKmust be regenerated against the new sizes.
SensorInfo and DeserializerInfo Additions#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
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
Rename
UserDefDataTypeCaptureSettingdeclarations to the new shorter name:UserDefDataTypeCaptureSetting s {};
UserDefDTCaptureSetting s {};
Compile-time signal of this break:
'UserDefDataTypeCaptureSetting' was not declared in this scope.For multi-virtual-channel sensors, opt in to the list-style API:
SensorInfo s; s.useVcInfoList = true; s.vcInfoList[0] = ...;
Linux clients of SIPL who require sensor authentication can now set
SensorInfo::isAuthEnabled = true.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 |
|---|---|---|---|
|
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
Qualify
TraceLevelenumerators 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.Replace any code that copies or moves an
INvSIPLDeviceBlockTraceinstance 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 |
|---|---|---|---|
|
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 |
|---|---|---|---|
|
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
Rename
virtualChannelIdreads:uint32_t vc = data.virtualChannelId;
uint32_t vc = data.uVcIdx;
Compile-time signal of this break:
no member named 'virtualChannelId' in 'NotificationData'.Custom
FillRawBufferimplementations should populateRawBuffer::uVcIdxper virtual channel:RawBuffer rb; rb.uVcIdx = 0U; // set per virtual channel
OVT Module Power-Off Removed#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The |
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 |
|---|---|---|---|
|
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
|
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 |
|---|---|---|---|
|
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
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));
Use the new comparison operators directly:
if (notif1 == notif2) { ... }
autoCtrlOutputSetting Removed from SiplControlAutoIspStats#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The |
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
Replace
-std=c++14with-std=c++17in: -camera/Makefile-sample/MakefileApply 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
Delete these source directories:
nvsipl/devblk/cameramodule/MAX96712cameramodule/ov2311/nvsipl/devblk/devblk_new/cameramodule/MAX96712cameramodule/ov2311_c/
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 |
No. Source changes are required. Code that calls |
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
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;
Update all functions inheriting from
CNvMDeserializer::GetErrorSize()andCNvMDeserializer::GetErrorInfo()to beconst.
Compile-time signal of this break:
undefined reference to nvsipl::CNvMDeserializer::GetErrorSize(unsigned long&).