#include #include #include #include #include #include #include #include "cudaEGL.h" #include "Error.h" using namespace Argus; using namespace EGLStream; NvEglRenderer *g_renderer = NULL; Size2D STREAM_SIZE(1920, 1080); bool do_exit = false; static void *render_thread(void *arg) { OutputStream *stream = (OutputStream *)arg; UniqueObj consumer; consumer.reset(FrameConsumer::create(stream)); IEGLOutputStream *iEglOutputStream; IFrameConsumer *iFrameConsumer; iEglOutputStream = interface_cast(stream); iFrameConsumer = interface_cast(consumer); if (!iFrameConsumer) fprintf(stderr, "Failed to get IFrameConsumer interface"); /* Wait until the producer has connected to the stream */ printf("Waiting until producer is connected...\n"); if (iEglOutputStream->waitUntilConnected() != STATUS_OK) { fprintf(stderr, "Stream failed to connect."); return NULL; } printf("Producer has connected; continuing.\n"); NvBufferCreateParams params = { .width=(int)STREAM_SIZE.width(), .height=(int)STREAM_SIZE.height(), .payloadType=NvBufferPayload_SurfArray, .layout=NvBufferLayout_Pitch, .colorFormat=NvBufferColorFormat_YUV420, }; int dmabuf; int err = NvBufferCreateEx(&dmabuf, ¶ms); assert(err == 0); NvBufferParams p; NvBufferGetParams(dmabuf, &p); printf("nvbuf pitches: %d %d %d\n", p.pitch[0], p.pitch[1], p.pitch[2]); int frame_id = 0; while (!do_exit) { UniqueObj frame(iFrameConsumer->acquireFrame()); IFrame *iFrame = interface_cast