summaryrefslogtreecommitdiff
path: root/libavcodec/nvenc.c
diff options
context:
space:
mode:
authorTimo Rothenpieler <timo@rothenpieler.org>2017-05-07 13:35:25 +0200
committerTimo Rothenpieler <timo@rothenpieler.org>2017-05-07 13:35:25 +0200
commitdad6f44bbd578ba386ef8fdce55f88b4df21fdf6 (patch)
tree1af2d90d4d32be69c125497fce6267791392e2ba /libavcodec/nvenc.c
parentcc25a887c5467be5c7b004665047a32d36c9cf42 (diff)
avcodec/nvenc: support external context in sw mode
Diffstat (limited to 'libavcodec/nvenc.c')
-rw-r--r--libavcodec/nvenc.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 00766c25d0..ab04a936af 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -400,16 +400,21 @@ static av_cold int nvenc_setup_device(AVCodecContext *avctx)
return AVERROR_BUG;
}
- if (avctx->pix_fmt == AV_PIX_FMT_CUDA) {
+ if (avctx->pix_fmt == AV_PIX_FMT_CUDA || avctx->hw_frames_ctx || avctx->hw_device_ctx) {
AVHWFramesContext *frames_ctx;
+ AVHWDeviceContext *hwdev_ctx;
AVCUDADeviceContext *device_hwctx;
int ret;
- if (!avctx->hw_frames_ctx)
+ if (avctx->hw_frames_ctx) {
+ frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
+ device_hwctx = frames_ctx->device_ctx->hwctx;
+ } else if (avctx->hw_device_ctx) {
+ hwdev_ctx = (AVHWDeviceContext*)avctx->hw_device_ctx->data;
+ device_hwctx = hwdev_ctx->hwctx;
+ } else {
return AVERROR(EINVAL);
-
- frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
- device_hwctx = frames_ctx->device_ctx->hwctx;
+ }
ctx->cu_context = device_hwctx->cuda_ctx;