Receiving Objects
On the other endpoint receives the NvSciStreamEventType_SignalObj
.
NvSciStreamBlockElementSignalObjGet()
is operational on the endpoint
receiving the event.
NvSciError
NvSciStreamBlockElementSignalObjGet(
NvSciStreamBlock const block,
Uint32_t const queryBlockIndex,
Uint32_t const elemIndex,
NvSciSyncObj* const SignalSyncObj
)
Ownership of the retrieved NvSciSyncObj
handle belongs to the application
calling the function, and it must free the sync object when it is no longer required. The
application must map these into the drivers and use them to interpret fences received from the
stream.
As with the requirements, the synchronization objects received may not match those sent. If there is more than one consumer, the stream combines their synchronization objects into a single list per element before passing it to the producer. The stream may also replace the synchronization objects with its own if it must perform intermediate copy operations to pass the data from one endpoint to the other.
Synchronization specified for each element requires care. If a consumer requires synchronous
access (Producer receives NULL NvSciSyncObj handle
by
NvSciStreamBlockElementSignalObjGet
()) but the producer normally generates
this data asynchronously, then an extra burden is placed on the producer application. During
streaming the producer application waits for that element to finish being generated before it
inserts the payload into the stream.
After receiving all the synchronization objects they care about, the endpoint applications
call the NvSciStreamBlockSetupStatusSet()
function with a value of
NvSciStreamSetup_SignalObjImport
.