|
|
|
@ -39,6 +39,31 @@ static const enum AVPixelFormat supported_formats[] = { |
|
|
|
|
AV_PIX_FMT_P016, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static int cuda_frames_get_constraints(AVHWDeviceContext *ctx, |
|
|
|
|
const void *hwconfig, |
|
|
|
|
AVHWFramesConstraints *constraints) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
constraints->valid_sw_formats = av_malloc_array(FF_ARRAY_ELEMS(supported_formats) + 1, |
|
|
|
|
sizeof(*constraints->valid_sw_formats)); |
|
|
|
|
if (!constraints->valid_sw_formats) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(supported_formats); i++) |
|
|
|
|
constraints->valid_sw_formats[i] = supported_formats[i]; |
|
|
|
|
constraints->valid_sw_formats[FF_ARRAY_ELEMS(supported_formats)] = AV_PIX_FMT_NONE; |
|
|
|
|
|
|
|
|
|
constraints->valid_hw_formats = av_malloc_array(2, sizeof(*constraints->valid_hw_formats)); |
|
|
|
|
if (!constraints->valid_hw_formats) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
constraints->valid_hw_formats[0] = AV_PIX_FMT_CUDA; |
|
|
|
|
constraints->valid_hw_formats[1] = AV_PIX_FMT_NONE; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void cuda_buffer_free(void *opaque, uint8_t *data) |
|
|
|
|
{ |
|
|
|
|
AVHWFramesContext *ctx = opaque; |
|
|
|
@ -376,6 +401,7 @@ const HWContextType ff_hwcontext_type_cuda = { |
|
|
|
|
.device_create = cuda_device_create, |
|
|
|
|
.device_init = cuda_device_init, |
|
|
|
|
.device_uninit = cuda_device_uninit, |
|
|
|
|
.frames_get_constraints = cuda_frames_get_constraints, |
|
|
|
|
.frames_init = cuda_frames_init, |
|
|
|
|
.frames_get_buffer = cuda_get_buffer, |
|
|
|
|
.transfer_get_formats = cuda_transfer_get_formats, |
|
|
|
|