[FFmpeg-devel] [PATCH 4/6] qsvenc: Allow creation of the internal session from a device context
wm4
nfxjfg at googlemail.com
Wed Jan 18 09:58:10 EET 2017
On Tue, 17 Jan 2017 22:31:10 +0000
Mark Thompson <sw at jkqxz.net> wrote:
> ---
> 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
Also seems fine.
More information about the ffmpeg-devel
mailing list