|
|
|
@ -314,15 +314,11 @@ private: |
|
|
|
|
|
|
|
|
|
NV_OF_CUDA_API_FUNCTION_LIST* GetAPI() |
|
|
|
|
{ |
|
|
|
|
std::lock_guard<std::mutex> lock(m_lock); |
|
|
|
|
return m_ofAPI.get(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NvOFHandle GetHandle() { return m_hOF; } |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
std::mutex m_lock; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
NvidiaOpticalFlowImpl(cv::Size imageSize, NV_OF_PERF_LEVEL perfPreset, bool bEnableTemporalHints, |
|
|
|
|
bool bEnableExternalHints, bool bEnableCostBuffer, int gpuId, Stream inputStream, Stream outputStream); |
|
|
|
@ -338,6 +334,8 @@ public: |
|
|
|
|
int gridSize, InputOutputArray upsampledFlow); |
|
|
|
|
|
|
|
|
|
virtual int getGridSize() const { return m_gridSize; } |
|
|
|
|
|
|
|
|
|
~NvidiaOpticalFlowImpl(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
NvidiaOpticalFlowImpl::NvidiaOpticalFlowImpl( |
|
|
|
@ -599,20 +597,24 @@ void NvidiaOpticalFlowImpl::collectGarbage() |
|
|
|
|
if (m_hInputBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hInputBuffer)); |
|
|
|
|
m_hInputBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_hReferenceBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hReferenceBuffer)); |
|
|
|
|
m_hReferenceBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_hOutputBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hOutputBuffer)); |
|
|
|
|
m_hOutputBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_enableExternalHints) |
|
|
|
|
{ |
|
|
|
|
if (m_hHintBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hHintBuffer)); |
|
|
|
|
m_hHintBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (m_enableCostBuffer) |
|
|
|
@ -620,6 +622,7 @@ void NvidiaOpticalFlowImpl::collectGarbage() |
|
|
|
|
if (m_hCostBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hCostBuffer)); |
|
|
|
|
m_hCostBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (m_inputStream) |
|
|
|
@ -633,9 +636,15 @@ void NvidiaOpticalFlowImpl::collectGarbage() |
|
|
|
|
if (m_hOF) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroy(m_hOF)); |
|
|
|
|
m_hOF = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NvidiaOpticalFlowImpl::~NvidiaOpticalFlowImpl() |
|
|
|
|
{ |
|
|
|
|
collectGarbage(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void NvidiaOpticalFlowImpl::upSampler(InputArray _flow, cv::Size imageSize, |
|
|
|
|
int gridSize, InputOutputArray upsampledFlow) |
|
|
|
|
{ |
|
|
|
@ -754,15 +763,11 @@ private: |
|
|
|
|
|
|
|
|
|
NV_OF_CUDA_API_FUNCTION_LIST* GetAPI() |
|
|
|
|
{ |
|
|
|
|
std::lock_guard<std::mutex> lock(m_lock); |
|
|
|
|
return m_ofAPI.get(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NvOFHandle GetHandle() { return m_hOF; } |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
std::mutex m_lock; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
NvidiaOpticalFlowImpl_2(cv::Size imageSize, NV_OF_PERF_LEVEL perfPreset, |
|
|
|
|
NV_OF_OUTPUT_VECTOR_GRID_SIZE outputGridSize, NV_OF_HINT_VECTOR_GRID_SIZE hintGridSize, |
|
|
|
@ -778,6 +783,8 @@ public: |
|
|
|
|
virtual void convertToFloat(InputArray flow, InputOutputArray floatFlow); |
|
|
|
|
|
|
|
|
|
virtual int getGridSize() const { return m_gridSize; } |
|
|
|
|
|
|
|
|
|
~NvidiaOpticalFlowImpl_2(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
NvidiaOpticalFlowImpl_2::NvidiaOpticalFlowImpl_2( |
|
|
|
@ -1149,24 +1156,29 @@ void NvidiaOpticalFlowImpl_2::collectGarbage() |
|
|
|
|
if (m_hInputBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hInputBuffer)); |
|
|
|
|
m_hInputBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_hReferenceBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hReferenceBuffer)); |
|
|
|
|
m_hReferenceBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_hOutputBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hOutputBuffer)); |
|
|
|
|
m_hOutputBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_scaleFactor > 1 && m_hOutputUpScaledBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hOutputUpScaledBuffer)); |
|
|
|
|
m_hOutputUpScaledBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
if (m_enableExternalHints) |
|
|
|
|
{ |
|
|
|
|
if (m_hHintBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hHintBuffer)); |
|
|
|
|
m_hHintBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (m_enableCostBuffer) |
|
|
|
@ -1174,6 +1186,7 @@ void NvidiaOpticalFlowImpl_2::collectGarbage() |
|
|
|
|
if (m_hCostBuffer) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroyGPUBufferCuda(m_hCostBuffer)); |
|
|
|
|
m_hCostBuffer = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (m_inputStream) |
|
|
|
@ -1187,9 +1200,15 @@ void NvidiaOpticalFlowImpl_2::collectGarbage() |
|
|
|
|
if (m_hOF) |
|
|
|
|
{ |
|
|
|
|
NVOF_API_CALL(GetAPI()->nvOFDestroy(m_hOF)); |
|
|
|
|
m_hOF = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NvidiaOpticalFlowImpl_2::~NvidiaOpticalFlowImpl_2() |
|
|
|
|
{ |
|
|
|
|
collectGarbage(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void NvidiaOpticalFlowImpl_2::convertToFloat(InputArray _flow, InputOutputArray floatFlow) |
|
|
|
|
{ |
|
|
|
|
Mat flow; |
|
|
|
|