Merge commit '2e219b491bcc0845248345fdad31231b081e06d1'
* commit '2e219b491bcc0845248345fdad31231b081e06d1': hwcontext_cuda: implement device creation Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
This commit is contained in:
		
						commit
						c5a0c16850
					
				| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user