Files
nvsci_samples/event_sample_app/block_ipc.c
svcmobrel-release 27df93a02c Updating prebuilts and/or headers
2eba699906039d6615aae4967f6ea79bfe44a40a - event_sample_app/block_pool.c
f3abb0a884f0647204ad32ff51255c4712e52120 - event_sample_app/Makefile
9ee49033e077ac5c8bf458a04c91dd3dbed9633d - event_sample_app/event_loop.h
b33adce6eb1bbc7af23f6c37b6a635479e18a66a - event_sample_app/block_returnsync.c
a56041c06b6bc1d3812b72b399d7d78dd7895485 - event_sample_app/block_limiter.c
ca34c957759f7a010f0cbbbf9bedc03a2c98092b - event_sample_app/block_c2c.c
8d6d0ec3aa8e374a1d2a5fedc9dd24ff7bbdb731 - event_sample_app/block_multicast.c
a76149a2531899e35843d939f60ad8979d8cf65f - event_sample_app/block_consumer_uc1.c
9da8763e4af4b4b7278507a3ebfe2c68a7a24585 - event_sample_app/util.h
2bf7e1383d6e8913c9b0a6a8bdd48fe63d8098d0 - event_sample_app/block_producer_uc1.c
a54abf82eaa2d888e379ab4596ba68ce264e80b5 - event_sample_app/block_info.h
080a6efe263be076c7046e70e31098c2bbed0f6d - event_sample_app/block_presentsync.c
7dd10e5ea71f0c4a09bbe1f9f148f67a13ee098c - event_sample_app/util.c
bc1a6f9017b28e5707c166a658a35e6b3986fdf4 - event_sample_app/usecase1.h
317f43efc59638bf1eae8303f0c79eafb059241a - event_sample_app/block_ipc.c
40361c8f0b68f7d5207db2466ce08c19c0bf1c90 - event_sample_app/event_loop_service.c
efad113d0107e5d8f90146f3102a7c0ed22f1a35 - event_sample_app/event_loop_threads.c
2908615cebcf36330b9850c57e8745bf324867b2 - event_sample_app/block_queue.c
36ed68eca1a7800cf0d94e763c9fc352ee8cda1e - event_sample_app/block_common.c
675f75d61bd0226625a8eaaf0e503c9e976c8d61 - event_sample_app/main.c
c3b26619dd07d221e953fc5dc29a50dcb95a8b97 - rawstream/Makefile
1fbb82e2281bb2e168c87fd20903bbed898ca160 - rawstream/rawstream_cuda.c
1d96498fe3c922f143f7e50e0a32b099714060ad - rawstream/rawstream_consumer.c
d077dafc9176686f6d081026225325c2a303a60e - rawstream/rawstream_producer.c
54ae655edddda7dcabe22fbf0b27c3f617978851 - rawstream/rawstream.h
d5ffeef3c7ad2af6f6f31385db7917b5ef9a7438 - rawstream/rawstream_ipc_linux.c
81e3d6f8ff5252797a7e9e170b74df6255f54f1b - rawstream/rawstream_main.c

Change-Id: I66e33d0d23ed328c6299d72ca9eb42de2429a9aa
2025-08-25 10:25:22 -07:00

200 lines
5.8 KiB
C

/*
* SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: LicenseRef-NvidiaProprietary
*
* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
* property and proprietary rights in and to this material, related
* documentation and any modifications thereto. Any use, reproduction,
* disclosure or distribution of this material and related documentation
* without an express license agreement from NVIDIA CORPORATION or
* its affiliates is strictly prohibited.
*/
/*
* NvSciStream Event Loop Driven Sample App - ipc blocks
*/
#include <stdlib.h>
#include <stdio.h>
#include "nvsciipc.h"
#include "nvscistream.h"
#include "block_info.h"
#include "event_loop.h"
/*
* Ipc blocks do not require any block-specific interactions so we
* use the set of common functions to handle its events. However
* they do have an additional data field which needs to be cleaned
* up when the block is destroyed, so we use more than the common
* data structure and delete function.
*/
/* Create and register a new ipcsrc block */
int32_t createIpcSrc(
NvSciStreamBlock* ipcsrc,
const char* channel,
bool useExtEventService)
{
NvSciError err;
uint32_t i;
uint32_t slot = 0;
/* Create a data structure to track the block's status */
BlockData* blockData = createCommon("IpcSrc", 0);
if (NULL == blockData) {
return 0;
}
for (i=0; i< MAX_CONSUMERS; i++) {
if (!strcmp(ipcEP[i].ipcChannel, channel)) {
slot = i;
break;
}
}
/* Open the named channel */
err = NvSciIpcOpenEndpoint(channel, &ipcEP[slot].ipcEndpoint);
if (NvSciError_Success != err) {
printf("Failed (%x) to open channel (%s) for IpcSrc\n",
err, channel);
deleteCommon(blockData);
return 0;
}
err = NvSciIpcResetEndpointSafe(ipcEP[slot].ipcEndpoint);
if (NvSciError_Success != err) {
printf("Failed (%x) to reset IPC endpoint", err);
}
/* Create a ipcsrc block */
err = NvSciStreamIpcSrcCreate(ipcEP[slot].ipcEndpoint,
sciSyncModule,
sciBufModule,
&blockData->block);
if (NvSciError_Success != err) {
printf("Failed (%x) to create IpcSrc block\n", err);
deleteCommon(blockData);
return 0;
}
/* Register block with event handling mechanism */
if (!eventFuncs->reg(blockData->block, blockData, handleCommon)) {
deleteCommon(blockData);
return 0;
}
/* Configuate block to use the external event service for
* internal I/O messages */
if (useExtEventService && !eventFuncs->regInt(blockData->block)) {
deleteCommon(blockData);
return 0;
}
*ipcsrc = blockData->block;
ipcEP[slot].ipcBlock = blockData->block;
ipcEP[slot].ipcOpened = true;
ipcEP[slot].ipcConnected = true;
return 1;
}
/* Create and register a new ipcsrc block */
int32_t createIpcSrc2(
NvSciStreamBlock* ipcsrc,
NvSciIpcEndpoint endpoint,
bool useExtEventService)
{
NvSciError err;
/* Create a data structure to track the block's status */
BlockData* blockData = createCommon("IpcSrc", 0);
if (NULL == blockData) {
return 0;
}
/* Create a ipcsrc block */
err = NvSciStreamIpcSrcCreate(endpoint,
sciSyncModule,
sciBufModule,
&blockData->block);
if (NvSciError_Success != err) {
printf("Failed (%x) to create IpcSrc block\n", err);
deleteCommon(blockData);
return 0;
}
/* Register block with event handling mechanism */
if (!eventFuncs->reg(blockData->block, blockData, handleCommon)) {
deleteCommon(blockData);
return 0;
}
/* Configuate block to use the external event service for
* internal I/O messages */
if (useExtEventService && !eventFuncs->regInt(blockData->block)) {
deleteCommon(blockData);
return 0;
}
*ipcsrc = blockData->block;
return 1;
}
/* Create and register a new ipcdst block */
int32_t createIpcDst(
NvSciStreamBlock* ipcdst,
const char* channel,
bool useExtEventService)
{
NvSciError err;
/* Create a data structure to track the block's status */
BlockData* blockData = createCommon("IpcDst", 0);
if (NULL == blockData) {
return 0;
}
/* Open the named channel */
err = NvSciIpcOpenEndpoint(channel, &ipcEP[0].ipcEndpoint);
if (NvSciError_Success != err) {
printf("Failed (%x) to open channel (%s) for IpcDst\n",
err, channel);
deleteCommon(blockData);
return 0;
}
err = NvSciIpcResetEndpointSafe(ipcEP[0].ipcEndpoint);
if (NvSciError_Success != err) {
printf("Failed (%x) to reset IPC endpoint", err);
}
/* Create a ipcdst block */
err = NvSciStreamIpcDstCreate(ipcEP[0].ipcEndpoint,
sciSyncModule,
sciBufModule,
&blockData->block);
if (NvSciError_Success != err) {
printf("Failed (%x) to create IpcDst block\n", err);
deleteCommon(blockData);
return 0;
}
/* Register block with event handling mechanism */
if (!eventFuncs->reg(blockData->block, blockData, handleCommon)) {
deleteCommon(blockData);
return 0;
}
/* Configuate block to use the external event service for
* internal I/O messages */
if (useExtEventService && !eventFuncs->regInt(blockData->block)) {
deleteCommon(blockData);
return 0;
}
*ipcdst = blockData->block;
return 1;
}