mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
hwcontext_cuda: implement device creation
This commit is contained in:
parent
38392b2af8
commit
2e219b491b
@ -253,6 +253,49 @@ static int cuda_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cuda_device_free(AVHWDeviceContext *ctx)
|
||||||
|
{
|
||||||
|
AVCUDADeviceContext *hwctx = ctx->hwctx;
|
||||||
|
cuCtxDestroy(hwctx->cuda_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cuda_device_create(AVHWDeviceContext *ctx, const char *device,
|
||||||
|
AVDictionary *opts, int flags)
|
||||||
|
{
|
||||||
|
AVCUDADeviceContext *hwctx = ctx->hwctx;
|
||||||
|
CUdevice cu_device;
|
||||||
|
CUcontext dummy;
|
||||||
|
CUresult err;
|
||||||
|
int device_idx = 0;
|
||||||
|
|
||||||
|
if (device)
|
||||||
|
device_idx = strtol(device, NULL, 0);
|
||||||
|
|
||||||
|
err = cuInit(0);
|
||||||
|
if (err != CUDA_SUCCESS) {
|
||||||
|
av_log(ctx, AV_LOG_ERROR, "Could not initialize the CUDA driver API\n");
|
||||||
|
return AVERROR_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = cuDeviceGet(&cu_device, device_idx);
|
||||||
|
if (err != CUDA_SUCCESS) {
|
||||||
|
av_log(ctx, AV_LOG_ERROR, "Could not get the device number %d\n", device_idx);
|
||||||
|
return AVERROR_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = cuCtxCreate(&hwctx->cuda_ctx, 0, cu_device);
|
||||||
|
if (err != CUDA_SUCCESS) {
|
||||||
|
av_log(ctx, AV_LOG_ERROR, "Error creating a CUDA context\n");
|
||||||
|
return AVERROR_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
cuCtxPopCurrent(&dummy);
|
||||||
|
|
||||||
|
ctx->free = cuda_device_free;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const HWContextType ff_hwcontext_type_cuda = {
|
const HWContextType ff_hwcontext_type_cuda = {
|
||||||
.type = AV_HWDEVICE_TYPE_CUDA,
|
.type = AV_HWDEVICE_TYPE_CUDA,
|
||||||
.name = "CUDA",
|
.name = "CUDA",
|
||||||
@ -260,6 +303,7 @@ const HWContextType ff_hwcontext_type_cuda = {
|
|||||||
.device_hwctx_size = sizeof(AVCUDADeviceContext),
|
.device_hwctx_size = sizeof(AVCUDADeviceContext),
|
||||||
.frames_priv_size = sizeof(CUDAFramesContext),
|
.frames_priv_size = sizeof(CUDAFramesContext),
|
||||||
|
|
||||||
|
.device_create = cuda_device_create,
|
||||||
.frames_init = cuda_frames_init,
|
.frames_init = cuda_frames_init,
|
||||||
.frames_get_buffer = cuda_get_buffer,
|
.frames_get_buffer = cuda_get_buffer,
|
||||||
.transfer_get_formats = cuda_transfer_get_formats,
|
.transfer_get_formats = cuda_transfer_get_formats,
|
||||||
|
Loading…
Reference in New Issue
Block a user