Releases: aws/aws-cdi-sdk
CDI (Cloud Digital Interface) SDK Version 3.1.0
What's New
- Added new command line tool called "ndi_test". Used to test NDI inputs and outputs with CDI.
- See details in USER_GUIDE_NDI_TEST_APP.md. Source code is at src/ndi_test
- Requires NDI-SDK version 5.x to be installed.
- Building on Linux: The make command line option "NDI_SDK=<ndi_sdk_path>" must be specified. Use "make help"
to see all make command line options. - Building on Windows: Must select the "Debug_DLL_NDI" or "Release_DLL_NDI" Visual Studio solution configuration.
- After build completes, use "ndi_test --help" to see command line options.
- Added new command line options to the cdi_test application:
- "-arx" or "--avm_autorx". For AVM receiver, auto-detect incoming AVM data and output to log.
- "lt" or "--log_timestamps". Log origination_ptp_timestamp values.
- For Windows, updated the Visual Studio projects solutions. There were some issues with dependencies across
configurations and removed some old preprocessor definitions.
Bug Fixes
- Windows EFA driver does not support changing the RNR (Remote Not Ready) configuration, so no need to attempt
to change its value to support versions of libfabric later than libfabric 1.9.x. See changes in src/cdi/adapter_efa.c - Ensure that WriteLineToLog() does not use invalid handle when writing to stdout. Problem was seen on the Windows
variant. See changes in in src/common/src/logger.c. - For the windows variant when using the CdiOsSocketReadFrom() API if the socket is not connected, ensure that there
are no packet bytes returned to the caller. See changes in src/common/src/os_windows.c - In cdi_test application, revised logic that generates timestamps used for origination_ptp_timestamp.
- For the windows variant, addressed GitHub Issue #132.
CDI (Cloud Digital Interface) SDK Version 3.0.2
What's New
- Added command-line tool 'src/tools/convert_image_to_rgb10.py' to convert an image into the 10-bit RGB payload format
supported by the CDI SDK. - Set libfabric option called FI_OPT_EFA_RNR_RETRY to ensure EFA hardware retries continuously when remote is not ready
to receive new packets. This is same behavior as libfabric 1.9.x.
Bug Fixes
- Made a pool thread-safe that was being used to hold packets as part of establishing a connection. This prevents race
conditions when multiple connections are trying to be established at the same time.
CDI (Cloud Digital Interface) SDK Version 3.0.1
What's New
- Updated install guide for Windows, replacing manual steps with an installation script.
Bug Fixes
- Fixed build and run-time problems with Windows variant. For the newer version of libfabric, must use v1.15.2 until
further notice.
v3.0.0
What's New
NOTE: Additional third-party library source code for libfabric (ie. libfabric_new) and the latest version of the EFA
driver MUST be downloaded and installed in order to use this version of the SDK. Refer to the install guides for
details.
Added use of post 1.9.x version of libfabric, which eliminates a memory copy of each adapter packet from the adapter
packet buffer into the application buffer. Backwards compatiblity with previous versions of the CDI SDK is maintained
by allowing the CDI SDK to access either libfabric 1.9 or the new version. This decision is made as part of the
existing protocol negotiation process between a transmitter and receiver.
Bug Fixes
Several GitHub issues were recently closed. Refer directly to recently closed issues or commit logs to see details.
AWS CDI-SDK Release v2.4.1
What's New
- Added optional bind IP address when creating connections using CdiAvmTxCreate() and CdiRawTxCreate(). See
bind_ip_addr_str in CdiTxConfigData and CdiRxConfigData. - Added new command line option to the test application to support specifying the bind IP address. See "-bind_ip" or
"-bip". - Added new core API to return internal read-only settings. See CdiCoreReadOnlySettings() in cdi_core_api.h.
Bug Fixes
- Fixed issues causing false disconnects related to the out-of-band Tx/Rx ping (keep-alive) mechanism that ensures a
Tx/Rx connection remains valid. - Fixed bug in CdiQueuePushWaitMultiple(). See changes in queue.c and cdi_queue_api.h. Details in GitHub Issue #76
- Fixed problems with the test application that were identified in GitHub Issue #82.
AWS CDI-SDK Release v2.4.0
What's New
- Created discussion pages on GitHub CDI-SDK site at https://github.com/aws/aws-cdi-sdk/discussions. Please start using so the whole community can benefit.
- Added additional test content at https://cdi.elemental.com/test_content/index.html
- Added new API for processing ancillary data payloads.
- Added a new check for ancillary data payloads to cdi_test. When using the "--riff" option, cdi_test will check that received payloads are formatted according to the CDI Baseline Profile format specification at https://cdi.elemental.com/specs/baseline-ancillary-data.
- Added command line tool 'dump_riff' for inspecting RIFF file content.
- Added kCdiStatusInvalidPayload to enum called CdiReturnStatus in cdi_core_api.h.
- Removed empty/unused functions CdiPoolGetBulk and CdiPoolPutBulk.
- Improved error reporting in os_linux.c.
- Added documentation about thread-pinning the poll threads.
- Rx buffers used in adapters are limited to the size defined within the libfabric provider. For the libfabric socket provider the limit is 376 adapter packets, which limits the maximum payload size to approximately 3,340,000 bytes. See logic concerning packet_count in CreatePacketPool(), adapter_efa_rx.c. The version of libfabric being used contains a memory leak if this limit is not enforced. The leak has been fixed in a later version of libfabric (see details at ofiwg/libfabric#7145). The next major release of the CDI-SDK will use the newer version of libfabric.
Bug Fixes
- Fixed a bug in the payload packetizer. The bug caused undefined data in linear receive buffers (buffer type LINEAR).
- Added locking around certain calls to libfabric APIs. Without the locks cdi_test with adapter type SOCKETS_LIBFABIC may sometimes fail because of race conditions in libfabric.
- Fixed a bug in the Endpoint Manager. The bug caused CdiAvmStreamEndpointDestroy in cdi_avm_api.c to hang without active data transfer.
- Fixed a bug that prevented creation of multiple CDI endpoints with the SOCKETS_LIBFABRIC adapter.
- Fixes/changes to the cdi_test application:
- Fixed buffer overflow when writing received payloads to a file.
- Skip unexpected payloads received.
- Fixed console logger issues with shutdown and multi-threaded use.
- Fixed timing issue as part of adapter connection setup. See changes in adapter.c.
- Fixed segfault in adapter when freeing Rx buffers. See changes in RxEnqueueFreeBuffer in internal_rx.c.
- Fixed some problems in adapter Tx's GetCompletions in adapter_efa_tx.c.
- Fixed GitHub Issue #67. See #67
AWS CDI-SDK Release v2.3.2
Replaces CDI-SDK v2.3.1, which should no longer be used.
What's New
- Added new logger macros CDI_LOG_WHEN() and CDI_LOG_THREAD_WHEN() that provide log message filtering and occurrence
count logic. - Added new command line options to the cdi_test application that disables validation of received payload user data.
This should be used when the cdi_test application is receiving payloads sent by applications other than cdi_test. See
"-nopud" or "--no_payload_user_data". - Renamed macro THREAD to CDI_THREAD in cdi_os_api.h.
- Moved "#ifdef __cplusplus" usage from public API header files to be part of the CDI_INTERFACE define.
- Added a new API CdiAvmValidateBaselineVersionString.
Bug Fixes
- Fixed problem that was introduced in SDK 2.3.1, which prevented previous versions of SDK transmitters from connecting
to version 2.3.1. - Fixed a bug in the CDI receiver code for linear buffers (buffer type LINEAR). The bug caused CDI applications
receiving data in linear buffer mode to generate error messages instead of processing received payloads. - Fixed some bugs in the cdi_test application. Cdi_test skipped the payload data check for some configurations, it did
not terminate with an error code for some Rx payload errors, and it incorrectly skipped some Rx checks with pattern
type NONE. - Fixed a bug in statistics gathering and the cdi_test application if wait time value wraps, causing a hang (very long
sleep). - Fixed bugs in the multiline logger API that may cause applications to crash when multiline loggers are disabled.
- Fixed a bug in CdiAvmRegisterBaselineProfile. The fix prevents registration of already registered baseline profiles.
AWS CDI-SDK Release v2.3.0
What's New
- When creating connections, added ability to share a single poll thread across multiple connections. This can be
used to reduce CPU core usage. The thread must have enough bandwidth to service all connections associated with it.- See shared_thread_id, which has been added to the CdiTxConfigData and CdiRxConfigData structures. NOTE: Use zero or
a negative value (ie. -1) to disable this feature and create a unique poll thread that is associated only with the
connection being created. - Added new command line options to the cdi_test application. See "-tc" or "--thread_conn".
- When using more than 6 multiple connections, depending on payload size and available memory, you may have to reduce
the size defined by MAX_RX_PACKETS_PER_CONNECTION. For Linux, you can also increase the number of available
hugepages from a default value of 1024 by modifying /etc/sysctl.conf to contain 2048 or higher as shown below. Must
then use "sudo sysctl -p".
vm.nr_hugepages = 2048
- See shared_thread_id, which has been added to the CdiTxConfigData and CdiRxConfigData structures. NOTE: Use zero or
Bug Fixes
- Removed macro NANOSECONDS_PER_SECOND from header cdi_utility_api.h.
- Added prefix CDI_ or Cdi to various macros and symbols in headers cdi_utility_api.h, cdi_core_api.h, cdi_logger_api.h,
cdi_queue_api.h, and cdi_test_unit_api.h. - Updated code for AVM baseline profiles to match published specifications concerning use of semicolons. The values
generated by CdiAvmMakeBaselineConfiguration() for video width and height were separated by a comma instead of a
semicolon. For example: "width=1920, height=1080;" will now be generated as "width=1920; height=1080;". - Updated code for GetAvmBaselineUnitSize() which was reporting incorrect unit sizes for audio and ancillary media
profiles. In previous versions GetAvmBaselineUnitSize() returned the number of bytes instead of the number of bits.
AWS CDI-SDK Release v2.2.0
What's New
- Changed protocol version to 2.1 (CDI_PROTOCOL_VERSION.CDI_PROTOCOL_MAJOR_VERSION) and added new probe protocol version 4 (CDI_PROBE_VERSION) to support bidirectional sockets used by probe control interface.
- Added new OS APIs for sockets. See CdiOsSocketGetSockAddrIn(), CdiOsSocketReadFrom() and CdiOsSocketWriteTo().
- Using bidirectional sockets for the out-of-band probe control interface. A single socket is used for each connection. Compatibilty with previous versions of the probe control interface is maintained.
- Added "CDI_" prefix to defines and types in cdi_os_api.h to prevent name collisions with application code.
- Added support for AVM connections that contain multiple endpoints. They can be used to demux and mux video, audio and ancillary data streams. Changes include:
- New documentation and diagrams. See include/cdi_avm_api.h.
- New AVM APIs. See CdiAvmTxStreamConnectionCreate(), CdiAvmTxStreamEndpointCreate() and CdiAvmEndpointTxPayload().
- Removed stream_identifier from CdiTxConfigDataStream structure. See include/cdi_avm_api.h.
- Removed stream_identifier from CdiCoreConnectionCbData structure. Added remote_ip_str and remote_dest_port. See include/cdi_core_api.h.
- Added new command line options to the cdi_test application. See "-XS" or "--new_conns".
- Added payload transfer start time. It is available in the CdiAvmRxCbData/CdiRawRxCbData structure parameter passed to the Rx payload application callbacks. See CdiCoreCbData, tx_start_time_microseconds in include/cdi_core_api.h.
- Added new CdiCoreNetworkAdapterDestroy() API. This allows dynamic destruction of resources created by CdiCoreNetworkAdapterInitialize(). Before using CdiCoreNetworkAdapterDestroy(), must ensure all connections using the adapter are closed. See CdiCoreConnectionDestroy(). Also, all connections and adapters must be closed/destroyed before using CdiCoreShutdown().
- Added internal reference count to Logger state data. NOTE: Each time CdiLoggerInitialize() is called, CdiLoggerShutdown() must be called once. The test applications have been updated to call CdiLoggerShutdown().
- Added support for additional internal transport layer protocols. See new types/APIs in cdi/src/protocol.h.
- Protocol version has been added to the application connection callback data. See negotiated_... in
CdiCoreConnectionCbData in include/cdi_core_api.h. - CDI_PROTOCOL_MAJOR_VERSION has been replaced with CDI_PROBE_VERSION.
- Supports previous protocol/probe version. See cdi/src/protocol_v1.c.
- New protocol/probe version 2.0.3. Contains the new probe command kProbeStateSendProtocolVersion, used to negotiate
a compatible version between local and remote endpoints. Protocol and probe data structure differences are
described in cdi/src/protocol_v2.c.
- Protocol version has been added to the application connection callback data. See negotiated_... in
- Fixed two values in video baseline profile for TCS ("ST2065-1", "ST428-1") and colorimetry ("ST2065-1", "ST2065-3") that improperly had underscores rather than hyphens. This change brings the implementation in line with the specifications (ST 2110-20, -30). A calculated risk assessment has been made to not follow the normal process of incrementing the API version number. While this does introduce an unhandled incompatibility, the likelihood of this affecting actual workflows was deemed to be insignificant.
Bug Fixes
- Fixed problems with multiple calls to CdiCoreInitialize(). See #34
AWS CDI-SDK Release v2.0.2
What's New
- Added initial version of the SDK coding style guide. See CODE_STYLE_GUIDE.md.
- Replaced CdiLoggerSetGlobalLog() API with new CdiLogGlobalGet() API, which returns the global log handle created
via CdiCoreInitialize() API. The deprecated API did not serve any functional purpose. - Added Windows targets for generating DLLs for the CDI-AWS SDK library. See use of Debug_DLL and Release_DLL in the
Visual Studio solution and project files. Details at: #26 - Added use of the CDI_INTERFACE define to APIs that were not previously using it. Only affects the new Windows DLL
targets. - When using CdiOsMemAllocHugePage() API on Linux, the size of bytes allocated must be a multiple of
HUGE_PAGES_BYTE_SIZE. See definition in cdi_os_api.h. If not, the memory will not be freed when using the
CdiOsMemFreeHugePage() API. - Renamed the queue type kQueueMultipleWriters to kQueueMultipleWritersFlag to clarify that the value is a flag,
not an OS signal type. See include/cdi_queue_api.h. - Added defines to uniquely identify the CDI transport protocol used by the SDK. See the CDI_PROTOCOL_VERSION,
CDI_PROTOCOL_MAJOR_VERSION and CDI_PROTOCOL_MINOR_VERSION in include/cdi_core_api.h.
Bug Fixes
- Fixed a problem in RxPollFreeBuffer() that could lead to an assert (seg-fault in debug build) in CdiListRemove() when
trying to remove an entry from an empty list. - Fixed a Rx adapter buffer memory leak when using the CdiCoreRxFreeBuffer() API from multiple threads.
- Fixed a seg-fault when using the CdiLoggerMultilineEnd() API from multiple threads.
- Fixed a seg-fault in the Windows variant when logging to stdout and stdout did not exist. The global logger created
via CdiCoreInitialize() API is now used instead of stdout. Details at: #25
s * Fixed problem with Linux Makefile that could cause the AWS-SDK to always partially re-build on Linux.