器件型号: TDA4VEN-Q1
Thread 中讨论的其他器件: TDA4VH
尊敬的 TI 专家:
我们在 TDA4VEN 11.01 SDK 上构建了 tiovx 应用。
目标: 如何在不同 tiovx 图之间高效传输图像数据
背景:
流水线的设计如下:

主流水线对延迟和帧速率 (~60fps) 有极高的要求、而多个子流水线(TIDL 节点,自定义节点)的输出处理时间约在 50ms 至 300ms 之间。
为了满足主流水线的帧速率和延迟要求、 我们计划将主流水线和子流水线放置在不同 tiovx 图中。 然后、我们在 edgeai-tiovx-apps app_tiovx_linux_multi_graph_test.c 中发现了一个示例
/*
* Note that in below loop graph on and 2 are running sequentially
* to run them in parellel, you need to decuple them by creating
* seperate threads for enqueue/dequeue of each graph
*/
for (int i = 0; i < APP_NUM_ITERATIONS; i++) {
//Graph1 Execution
inbuf1 = v4l2_decode_dqueue_buf(v4l2_decode_handle);
outbuf1 = tiovx_modules_acquire_buf(out_buf_pool1);
tiovx_modules_enqueue_buf(inbuf1);
tiovx_modules_enqueue_buf(outbuf1);
inbuf1 = tiovx_modules_dequeue_buf(in_buf_pool1);
outbuf1 = tiovx_modules_dequeue_buf(out_buf_pool1);
v4l2_decode_enqueue_buf(v4l2_decode_handle, inbuf1);
//Graph2 Execution
inbuf2 = tiovx_modules_acquire_buf(in_buf_pool2);
outbuf2 = tiovx_modules_acquire_buf(out_buf_pool2);
//Swap input2 mem with output1 to feed graph1 out to graph2
tiovx_modules_buf_swap_mem(outbuf1, inbuf2);
tiovx_modules_release_buf(outbuf1);
tiovx_modules_enqueue_buf(inbuf2);
tiovx_modules_enqueue_buf(outbuf2);
inbuf2 = tiovx_modules_dequeue_buf(in_buf_pool2);
outbuf2 = tiovx_modules_dequeue_buf(out_buf_pool2);
kms_display_render_buf(kms_display_handle, outbuf2);
tiovx_modules_release_buf(inbuf2);
tiovx_modules_release_buf(outbuf2);
}
但此处使用的 tiovx_modules_buf_swap_mem () 方法无法解决我的问题。 由于 WebNode 的输出缓冲区将用于服务器输出管道,其中一个管道使用缓冲区,而另一个不能同时使用。
似乎一种可行的方法是通过为每个流水线进行复制来创建一个单独的缓冲区。 但是、由于图像数据非常大、并且我们的子流水线数量可能会增加、这种复制过程会导致大量 CPU 消耗。
因此、我们想问 TI 的专家对于这个问题是否有好的建议?
此致、
Jialin