Reconciling Requirements

For the pool attached to the producer:

The application managing the pool must take the capabilities provided by the producer and the requirements provided by the consumer(s) and determine the final packet layout. For each element type provided by the producer and required by a consumer, it should merge their attribute lists to obtain the attribute list to use in allocating the buffer. If there is an element type provided by the producer but not required by any of the consumers, omit it from the packets. If there is a type required by a consumer that the producer cannot provide, the application can trigger an error. However, there may be cases understood by the application suite where the consumer requirements represent several options, and only one of the requested element types is needed. If the producer can provide one of them, streaming can proceed. It is to support possible complex situations like this that the reconciliation process is left to applications, rather than being done automatically by the stream.

As in producer and consumer(s) applications, pool application calls the NvSciStreamBlockSetupStatusSet() function with a value of NvSciStreamSetup_ElementImport to inform NvSciStream it has finished element import.

Once the application has determined the final layout, it calls NvSciStreamBlockElementAttrSet() to inform NvSciStream the reconciled element attributes. It also must call NvSciStreamBlockSetupStatusSet() function with a value of NvSciStreamSetup_ElementExport to inform NvSciStream it finished exporting element attributes. Producer and consumer(s) application(s) query event NvSciStreamEventType_Elements and get the element attributes by the function described above. Applications use this information to interpret the data layout and prepare to receive the packets.

For the pool attached to the memory-boundary destination IPC:

The application retrieves the element attributes reconciled by the producer’s pool after querying event NvSciStreamEventType_Elements. The application calls the NvSciStreamBlockSetupStatusSet() function with a value of NvSciStreamSetup_ElementImport to inform NvSciStream it finished element import.