mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 14:36:24 +00:00
nvenc: Fix undefined reference build error on MSVC and CUDA 9.1
This commit is contained in:
parent
3cd1d0c7bc
commit
c75907d23c
1 changed files with 24 additions and 12 deletions
|
@ -33,6 +33,7 @@
|
||||||
#include <cuda.h>
|
#include <cuda.h>
|
||||||
#include <cuda_runtime_api.h>
|
#include <cuda_runtime_api.h>
|
||||||
#include <cuda_gl_interop.h>
|
#include <cuda_gl_interop.h>
|
||||||
|
#include <cudaGL.h>
|
||||||
#include <gst/gl/gl.h>
|
#include <gst/gl/gl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -171,8 +172,8 @@ G_LOCK_DEFINE_STATIC (initialization_lock);
|
||||||
struct gl_input_resource
|
struct gl_input_resource
|
||||||
{
|
{
|
||||||
GstGLMemory *gl_mem[GST_VIDEO_MAX_PLANES];
|
GstGLMemory *gl_mem[GST_VIDEO_MAX_PLANES];
|
||||||
struct cudaGraphicsResource *cuda_texture;
|
CUgraphicsResource cuda_texture;
|
||||||
gpointer cuda_plane_pointers[GST_VIDEO_MAX_PLANES];
|
CUdeviceptr cuda_plane_pointers[GST_VIDEO_MAX_PLANES];
|
||||||
gpointer cuda_pointer;
|
gpointer cuda_pointer;
|
||||||
gsize cuda_stride;
|
gsize cuda_stride;
|
||||||
gsize cuda_num_bytes;
|
gsize cuda_num_bytes;
|
||||||
|
@ -1453,6 +1454,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
cudaError_t cuda_ret;
|
cudaError_t cuda_ret;
|
||||||
guint8 *data_pointer;
|
guint8 *data_pointer;
|
||||||
guint i;
|
guint i;
|
||||||
|
CUDA_MEMCPY2D param;
|
||||||
|
|
||||||
cuCtxPushCurrent (data->nvenc->cuda_ctx);
|
cuCtxPushCurrent (data->nvenc->cuda_ctx);
|
||||||
data_pointer = data->in_gl_resource->cuda_pointer;
|
data_pointer = data->in_gl_resource->cuda_pointer;
|
||||||
|
@ -1480,7 +1482,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
gl_mem->mem.tex_id);
|
gl_mem->mem.tex_id);
|
||||||
|
|
||||||
cuda_ret =
|
cuda_ret =
|
||||||
cudaGraphicsGLRegisterBuffer (&data->in_gl_resource->cuda_texture,
|
cuGraphicsGLRegisterBuffer (&data->in_gl_resource->cuda_texture,
|
||||||
gl_buf_obj->id, cudaGraphicsRegisterFlagsReadOnly);
|
gl_buf_obj->id, cudaGraphicsRegisterFlagsReadOnly);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
GST_ERROR_OBJECT (data->nvenc, "failed to register GL texture %u to cuda "
|
GST_ERROR_OBJECT (data->nvenc, "failed to register GL texture %u to cuda "
|
||||||
|
@ -1489,7 +1491,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
cuda_ret =
|
cuda_ret =
|
||||||
cudaGraphicsMapResources (1, &data->in_gl_resource->cuda_texture, 0);
|
cuGraphicsMapResources (1, &data->in_gl_resource->cuda_texture, 0);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
GST_ERROR_OBJECT (data->nvenc, "failed to map GL texture %u into cuda "
|
GST_ERROR_OBJECT (data->nvenc, "failed to map GL texture %u into cuda "
|
||||||
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
||||||
|
@ -1497,7 +1499,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
cuda_ret =
|
cuda_ret =
|
||||||
cudaGraphicsResourceGetMappedPointer (&data->in_gl_resource->
|
cuGraphicsResourceGetMappedPointer (&data->in_gl_resource->
|
||||||
cuda_plane_pointers[i], &data->in_gl_resource->cuda_num_bytes,
|
cuda_plane_pointers[i], &data->in_gl_resource->cuda_num_bytes,
|
||||||
data->in_gl_resource->cuda_texture);
|
data->in_gl_resource->cuda_texture);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
|
@ -1510,11 +1512,21 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
dest_stride = data->in_gl_resource->cuda_stride;
|
dest_stride = data->in_gl_resource->cuda_stride;
|
||||||
|
|
||||||
/* copy into scratch buffer */
|
/* copy into scratch buffer */
|
||||||
cuda_ret =
|
param.srcXInBytes = 0;
|
||||||
cudaMemcpy2D (data_pointer, dest_stride,
|
param.srcY = 0;
|
||||||
data->in_gl_resource->cuda_plane_pointers[i], src_stride,
|
param.srcMemoryType = CU_MEMORYTYPE_DEVICE;
|
||||||
_get_plane_width (data->info, i) * plane_n_components,
|
param.srcDevice = data->in_gl_resource->cuda_plane_pointers[i];
|
||||||
_get_plane_height (data->info, i), cudaMemcpyDeviceToDevice);
|
param.srcPitch = src_stride;
|
||||||
|
|
||||||
|
param.dstXInBytes = 0;
|
||||||
|
param.dstY = 0;
|
||||||
|
param.dstMemoryType = CU_MEMORYTYPE_DEVICE;
|
||||||
|
param.dstDevice = (CUdeviceptr) data_pointer;
|
||||||
|
param.dstPitch = dest_stride;
|
||||||
|
param.WidthInBytes = _get_plane_width (data->info, i) * plane_n_components;
|
||||||
|
param.Height = _get_plane_height (data->info, i);
|
||||||
|
|
||||||
|
cuda_ret = cuMemcpy2D (¶m);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
GST_ERROR_OBJECT (data->nvenc, "failed to copy GL texture %u into cuda "
|
GST_ERROR_OBJECT (data->nvenc, "failed to copy GL texture %u into cuda "
|
||||||
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
||||||
|
@ -1522,7 +1534,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
cuda_ret =
|
cuda_ret =
|
||||||
cudaGraphicsUnmapResources (1, &data->in_gl_resource->cuda_texture, 0);
|
cuGraphicsUnmapResources (1, &data->in_gl_resource->cuda_texture, 0);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
GST_ERROR_OBJECT (data->nvenc, "failed to unmap GL texture %u from cuda "
|
GST_ERROR_OBJECT (data->nvenc, "failed to unmap GL texture %u from cuda "
|
||||||
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
"ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
||||||
|
@ -1530,7 +1542,7 @@ _map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
cuda_ret =
|
cuda_ret =
|
||||||
cudaGraphicsUnregisterResource (data->in_gl_resource->cuda_texture);
|
cuGraphicsUnregisterResource (data->in_gl_resource->cuda_texture);
|
||||||
if (cuda_ret != cudaSuccess) {
|
if (cuda_ret != cudaSuccess) {
|
||||||
GST_ERROR_OBJECT (data->nvenc, "failed to unregister GL texture %u from "
|
GST_ERROR_OBJECT (data->nvenc, "failed to unregister GL texture %u from "
|
||||||
"cuda ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
"cuda ret :%d", gl_mem->mem.tex_id, cuda_ret);
|
||||||
|
|
Loading…
Reference in a new issue