This is a newer API that is intended for decoders like the cuvid wrapper. Until now, the wrapper required to set an awkward "incomplete" hw_frames_ctx to set the device. Now the device can be set directly, and the user can get AV_PIX_FMT_CUDA output for a specific device simply by setting hw_device_ctx. This still does a dummy ff_get_format() call at init time, and should be fully backward compatible.tags/n3.4
@@ -15,6 +15,11 @@ libavutil: 2015-08-28 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2017-05-05 - xxxxxxxxxx - lavc 57.94.100 - avcodec.h | |||||
The cuvid decoders now support AVCodecContext.hw_device_ctx, which removes | |||||
the requirement to set an incomplete AVCodecContext.hw_frames_ctx only to | |||||
set the Cuda device handle. | |||||
2017-04-11 - 8378466507 - lavu 55.61.100 - avstring.h | 2017-04-11 - 8378466507 - lavu 55.61.100 - avstring.h | ||||
Add av_strireplace(). | Add av_strireplace(). | ||||
@@ -802,9 +802,17 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) | |||||
goto error; | goto error; | ||||
} | } | ||||
} else { | } else { | ||||
ret = av_hwdevice_ctx_create(&ctx->hwdevice, AV_HWDEVICE_TYPE_CUDA, ctx->cu_gpu, NULL, 0); | |||||
if (ret < 0) | |||||
goto error; | |||||
if (avctx->hw_device_ctx) { | |||||
ctx->hwdevice = av_buffer_ref(avctx->hw_device_ctx); | |||||
if (!ctx->hwdevice) { | |||||
ret = AVERROR(ENOMEM); | |||||
goto error; | |||||
} | |||||
} else { | |||||
ret = av_hwdevice_ctx_create(&ctx->hwdevice, AV_HWDEVICE_TYPE_CUDA, ctx->cu_gpu, NULL, 0); | |||||
if (ret < 0) | |||||
goto error; | |||||
} | |||||
ctx->hwframe = av_hwframe_ctx_alloc(ctx->hwdevice); | ctx->hwframe = av_hwframe_ctx_alloc(ctx->hwdevice); | ||||
if (!ctx->hwframe) { | if (!ctx->hwframe) { | ||||
@@ -28,7 +28,7 @@ | |||||
#include "libavutil/version.h" | #include "libavutil/version.h" | ||||
#define LIBAVCODEC_VERSION_MAJOR 57 | #define LIBAVCODEC_VERSION_MAJOR 57 | ||||
#define LIBAVCODEC_VERSION_MINOR 93 | |||||
#define LIBAVCODEC_VERSION_MINOR 94 | |||||
#define LIBAVCODEC_VERSION_MICRO 100 | #define LIBAVCODEC_VERSION_MICRO 100 | ||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||