| 183 | } |
| 184 | |
| 185 | void NvOFBufferCudaDevicePtr::UploadData(const void* pData, CUmemorytype mem_type) { |
| 186 | CUstream stream = m_NvOFAPI->GetCudaStream(getBufferUsage()); |
| 187 | CUDA_DRVAPI_CALL(cuCtxPushCurrent(m_cuContext)); |
| 188 | CUDA_MEMCPY2D cuCopy2d; |
| 189 | memset(&cuCopy2d, 0, sizeof(cuCopy2d)); |
| 190 | cuCopy2d.WidthInBytes = getWidth() * getElementSize(); |
| 191 | mgb_assert( |
| 192 | CU_MEMORYTYPE_HOST == mem_type || CU_MEMORYTYPE_DEVICE == mem_type, |
| 193 | "do not imp mem type!!!"); |
| 194 | cuCopy2d.srcMemoryType = mem_type; |
| 195 | if (CU_MEMORYTYPE_HOST == mem_type) { |
| 196 | cuCopy2d.srcHost = pData; |
| 197 | } else if (CU_MEMORYTYPE_DEVICE == mem_type) { |
| 198 | cuCopy2d.srcDevice = (CUdeviceptr)pData; |
| 199 | } |
| 200 | cuCopy2d.srcPitch = cuCopy2d.WidthInBytes; |
| 201 | cuCopy2d.dstMemoryType = CU_MEMORYTYPE_DEVICE; |
| 202 | cuCopy2d.dstDevice = getCudaDevicePtr(); |
| 203 | cuCopy2d.dstPitch = m_strideInfo.strideInfo[0].strideXInBytes; |
| 204 | cuCopy2d.Height = getHeight(); |
| 205 | CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream)); |
| 206 | |
| 207 | if (getBufferFormat() == NV_OF_BUFFER_FORMAT_NV12) { |
| 208 | cuCopy2d.Height = (getHeight() + 1) / 2; |
| 209 | cuCopy2d.srcHost = |
| 210 | ((const uint8_t*)pData + (cuCopy2d.srcPitch * cuCopy2d.Height)); |
| 211 | cuCopy2d.dstY = m_strideInfo.strideInfo[0].strideYInBytes; |
| 212 | CUDA_DRVAPI_CALL(cuMemcpy2DAsync(&cuCopy2d, stream)); |
| 213 | } |
| 214 | CUDA_DRVAPI_CALL(cuCtxPopCurrent(&m_cuContext)); |
| 215 | } |
| 216 | |
| 217 | void NvOFBufferCudaDevicePtr::DownloadData(void* pData, CUmemorytype mem_type) { |
| 218 | CUstream stream = m_NvOFAPI->GetCudaStream(getBufferUsage()); |
no test coverage detected