--- libavcodec/qsvenc.c | 15 +++++++++++++++ libavcodec/qsvenc.h | 2 ++ 2 files changed, 17 insertions(+)
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index ac443c1..7a46979 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -672,6 +672,19 @@ static int qsvenc_init_session(AVCodecContext *avctx, QSVEncContext *q) } q->session = q->internal_session; + } else if (avctx->hw_device_ctx) { + q->hw_device_ctx = av_buffer_ref(avctx->hw_device_ctx); + if (!q->hw_device_ctx) + return AVERROR(ENOMEM); + + ret = ff_qsv_init_session_device(avctx, &q->internal_session, + q->hw_device_ctx, q->load_plugins); + if (ret < 0) { + av_buffer_unref(&q->hw_device_ctx); + return ret; + } + + q->session = q->internal_session; } else { ret = ff_qsv_init_internal_session(avctx, &q->internal_session, q->load_plugins); @@ -1121,5 +1134,7 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) av_freep(&q->extparam); + av_buffer_unref(&q->hw_device_ctx); + return 0; } diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 361d933..a2187ad 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -104,6 +104,8 @@ typedef struct QSVEncContext { AVFifoBuffer *async_fifo; + AVBufferRef *hw_device_ctx; + QSVFramesContext frames_ctx; // options set by the caller -- 2.7.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel