From patchwork Tue Jan 17 22:30:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 2237 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp738961vsb; Tue, 17 Jan 2017 14:30:54 -0800 (PST) X-Received: by 10.28.199.206 with SMTP id x197mr7776677wmf.5.1484692254326; Tue, 17 Jan 2017 14:30:54 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q17si13411101wrc.29.2017.01.17.14.30.53; Tue, 17 Jan 2017 14:30:54 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DDD1A68A296; Wed, 18 Jan 2017 00:30:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0FF63689995 for ; Wed, 18 Jan 2017 00:30:36 +0200 (EET) Received: by mail-wm0-f43.google.com with SMTP id r126so221363400wmr.0 for ; Tue, 17 Jan 2017 14:30:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding; bh=rZQ3G7W/Q7wGANrHaoal6K4jm1h88aJGG1j+gzBWZrY=; b=QRsPXYzExbJZGXFc07OHtiZW1Q2kztvT0RkaExEJSdMQFE/zlG49kpLiEqWZ/w6pJa Dmxyt35alhzgj65ePxgL2daR7QmkOSDcT+yUsvp9LxN7O/E7c4BY/GETbO7k6BVg6b+K o8Yzz7QYZiovE0h06bDGEaO3+KC4tdywvrXfjbFxEi9cLIJeHpsxX/hC58aDwij7G+HF Q9ndksFDSm0WFN/9ene9weWRZbKy44y+FExBjP5mRgoPTxJ4rxpqYHScw1Sm4Y/9aSvj C+qM/oTSeQlZGvmz3/BGXb59msQuk3rvKzmSAFhROhfo5K94ZVN9wL8QHlK9tFyFVUVV D9VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=rZQ3G7W/Q7wGANrHaoal6K4jm1h88aJGG1j+gzBWZrY=; b=Lfol5oyTjyqVP4napDB+0bcmGaFh83ExFR8I+MsI+YexTGX/l6QF2Ckw8pzEWdLSzD 9ncn0r0Gfr93AqtQK/MmGzOVrAk0zFxcqJOn4P54kaifh8xpYxH5VB2mAA+gyGlmIyUs fTyL36TYZz/F0+SVI3YKLI0jpXqLHO2I6OSlop58A+O/wGy13BWGE/Z/kFhGbLSkkwmi D7l2TFSAuJftYVa9RXGi/vm3JBL6pjL2Eom3NPXfnUwXb8vYKgmKw9Ye2cbWmt1qbA3i ydMweviQTlvm/wj22bVckHu1kYxctQfU8jAce7MCV1n9CU0+VAEdwZOVEOf3mNRlJGtz pLWw== X-Gm-Message-State: AIkVDXINZv8MyKZONcdY0406Mh+ymCx+OyFhcusznz/ZCQNxNl/C6RV605YhZqzkfCSSBw== X-Received: by 10.223.128.226 with SMTP id 89mr1406wrl.130.1484692245293; Tue, 17 Jan 2017 14:30:45 -0800 (PST) Received: from [192.168.0.8] (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id l67sm33160420wmf.1.2017.01.17.14.30.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Jan 2017 14:30:44 -0800 (PST) To: FFmpeg development discussions and patches References: <6b40ed0b-4faf-1591-1a47-e8ad6bd12952@jkqxz.net> From: Mark Thompson Message-ID: <81c67c62-d7e7-badd-1c52-02317b858ad7@jkqxz.net> Date: Tue, 17 Jan 2017 22:30:44 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: <6b40ed0b-4faf-1591-1a47-e8ad6bd12952@jkqxz.net> Subject: [FFmpeg-devel] [PATCH 3/6] qsvdec: Allow creation of the internal session from a device context X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/qsvdec.c | 25 +++++++++++++++++++++++-- libavcodec/qsvdec.h | 2 ++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 258042d..5a42fd7 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -42,7 +42,7 @@ #include "qsvdec.h" static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session, - AVBufferRef *hw_frames_ref) + AVBufferRef *hw_frames_ref, AVBufferRef *hw_device_ref) { int ret; @@ -68,6 +68,25 @@ static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession ses } q->session = q->internal_session; + } else if (hw_device_ref) { + if (q->internal_session) { + MFXClose(q->internal_session); + q->internal_session = NULL; + } + av_buffer_unref(&q->hw_device_ctx); + + q->hw_device_ctx = av_buffer_ref(hw_device_ref); + 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 { if (!q->internal_session) { ret = ff_qsv_init_internal_session(avctx, &q->internal_session, @@ -133,7 +152,7 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q) iopattern = MFX_IOPATTERN_OUT_SYSTEM_MEMORY; q->iopattern = iopattern; - ret = qsv_init_session(avctx, q, session, avctx->hw_frames_ctx); + ret = qsv_init_session(avctx, q, session, avctx->hw_frames_ctx, avctx->hw_device_ctx); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Error initializing an MFX session\n"); return ret; @@ -431,6 +450,8 @@ int ff_qsv_decode_close(QSVContext *q) av_freep(&q->frames_ctx.mids); q->frames_ctx.nb_mids = 0; + av_buffer_unref(&q->hw_device_ctx); + return 0; } diff --git a/libavcodec/qsvdec.h b/libavcodec/qsvdec.h index 41fb716..5fb02aa 100644 --- a/libavcodec/qsvdec.h +++ b/libavcodec/qsvdec.h @@ -43,6 +43,8 @@ typedef struct QSVContext { // one mfxSession internal_session; + AVBufferRef *hw_device_ctx; + QSVFramesContext frames_ctx; /**