diff --git a/plugins/preprocess/preprocess_node.cpp b/plugins/preprocess/preprocess_node.cpp index 1e91fd4..3b99166 100644 --- a/plugins/preprocess/preprocess_node.cpp +++ b/plugins/preprocess/preprocess_node.cpp @@ -360,10 +360,14 @@ private: std::cerr << "[preprocess] DMA alloc for src failed\n"; return false; } + // CPU writes to a DMA-BUF must be flushed before RGA reads it. + DmaSyncStartFd(src_dma_buf->fd); if (!CopyToStridedBuffer(*frame, src_dma_buf->data(), src_dma_buf->size, src_wstride, src_hstride)) { + DmaSyncEndFd(src_dma_buf->fd); std::cerr << "[preprocess] copy src to DMA failed\n"; return false; } + DmaSyncEndFd(src_dma_buf->fd); src_buf = wrapbuffer_fd_t(src_dma_buf->fd, frame->width, frame->height, src_wstride, src_hstride, src_fmt_rga); } else {