Disable NV12 path for ANSCV by default. Currenly use cv::Mat** directly
This commit is contained in:
@@ -132,6 +132,13 @@ struct GpuFrameData {
|
||||
// freed while any consumer is still reading it.
|
||||
GpuNV12Slot* poolSlot = nullptr;
|
||||
|
||||
// --- Async D2D copy stream ---
|
||||
// The CUDA stream used for the async D2D copy from NVDEC surface to pool buffer.
|
||||
// Inference MUST call cudaStreamSynchronize on this before reading yPlane/uvPlane
|
||||
// to ensure the copy has completed. Stored as void* to avoid cuda_runtime.h here.
|
||||
// nullptr means D2D was synchronous (legacy path) or no D2D copy was done.
|
||||
void* d2dCopyStream = nullptr;
|
||||
|
||||
// Default constructor
|
||||
GpuFrameData() = default;
|
||||
|
||||
@@ -151,6 +158,7 @@ struct GpuFrameData {
|
||||
, refcount(o.refcount.load()), createdAt(o.createdAt)
|
||||
, ownerClient(o.ownerClient), onReleaseFn(o.onReleaseFn)
|
||||
, poolSlot(o.poolSlot)
|
||||
, d2dCopyStream(o.d2dCopyStream)
|
||||
{
|
||||
// Null out source to prevent double-free of owned pointers
|
||||
o.cpuYPlane = nullptr;
|
||||
@@ -165,6 +173,7 @@ struct GpuFrameData {
|
||||
o.ownerClient = nullptr;
|
||||
o.onReleaseFn = nullptr;
|
||||
o.poolSlot = nullptr;
|
||||
o.d2dCopyStream = nullptr;
|
||||
}
|
||||
|
||||
// No copy
|
||||
@@ -360,6 +369,12 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
// Push an AVFrame* (as void*) for deferred freeing.
|
||||
// Caller MUST hold the lock via acquire_lock().
|
||||
void pushPendingFree_locked(void* ptr) {
|
||||
if (ptr) m_pendingFree.push_back(ptr);
|
||||
}
|
||||
|
||||
// --- Drain pending GPU device pointers for caller to cudaFree ---
|
||||
// Each entry includes the device index for cudaSetDevice before cudaFree.
|
||||
// If minAgeMs > 0, only drain entries older than minAgeMs milliseconds.
|
||||
|
||||
Reference in New Issue
Block a user