From patchwork Wed Dec 20 07:10:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 45246 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5184:b0:194:e134:edd4 with SMTP id j4csp43539pzf; Tue, 19 Dec 2023 23:11:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IH2y1Xt4uVmxpqME+U3zkMmB5JqTT0dJsYDFRUtc8lrzm+dc7Rq7dyWcSyYlCsSJi6dJNyy X-Received: by 2002:a17:906:74d0:b0:a26:988f:b9aa with SMTP id z16-20020a17090674d000b00a26988fb9aamr39051ejl.206.1703056283188; Tue, 19 Dec 2023 23:11:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703056283; cv=none; d=google.com; s=arc-20160816; b=gR6y6hXwVEK4AcX+V8Y5OvBqvs37BgN5QJKHz3gVm8kI7GO8WTERdrWrPc3RRk3Y1o FZFsd9ttMqGzXJ2O/8MBaluD3WxAggG2cU+oMsfoIMxRFxYKWK7dR9zBegFVweAMDWpS +Ge1w69H4GGUHSaXAZNuv2dXXjdyBBfWFGXTo2T2qbmnLbg01dz1v9kRu7f1kVeL2ZGW knPKDw8Z9So7q7968jtboP3djjFzb2KQwVmh8mkjw+853hdEujRdNFN6F7pbqgzd9CUq m7tMnMP2ehsocYbTzTMhgnDYxcl4QQM4RvNQgSruC6inkIyO5WlOqoE0ozqnZAU2f0Pg gZ8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=rRqLuYiVhgM/Un00McJ7V+tspQY/i3q/bBOj31LJRGs=; fh=1kpmTRI1sW42eNCnNMby7VLIISQBX6KJuVYxOEG0t2A=; b=A/yVx9yNEFPQP/tk5pcYvTA8Dgshrq6PotH6+0YK+mnDBPDoAPxl49jzgLRK3y+wLX ApAaBKRp0VLlgLOPDsLfn8Z5gdqAuxKlUsVA0XbHriUh6NWjbQ3TpCAR4HEErnEX1C9s V0vUrzv9IOkEcsFcv1/LQvYX+2IDLRqy7tTIQYD8mzXf3Y3Fh2Ict1nWYls+VCbMlsxO WZMeNAu5Jl8V22G+YCzCtcZAY8BXbc1s9rUHgx636HjGBfp6KtK9y8iP/zBOqSzw9Rr8 M13UNOCmWmefXZj8PwmcjhkkGtt+q9dkUJKVm/t2imNmRhD2JmqShBTHNDOPNuqK2gyo +skg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=W+qkNoi2; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f16-20020a170906139000b00a2369e99556si1763305ejc.230.2023.12.19.23.11.22; Tue, 19 Dec 2023 23:11:23 -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=@intel.com header.s=Intel header.b=W+qkNoi2; 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 5BD9468D0AD; Wed, 20 Dec 2023 09:11:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.88]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1F61368CF6B for ; Wed, 20 Dec 2023 09:11:10 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703056276; x=1734592276; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=SFFhjkPsWHXv29vaSfbOIZ3+Aiiu9EQELCwgDjw0ObQ=; b=W+qkNoi2sYtbXhNKO5SfqLKuLZOeWFisS8PBz523od36KJkBGDl/Eq7B 2W3O+tzI5gnYEoqvTsV4r5C4LKAaVFIX5kwjH7zwYSYYwC8Heytf2KSGY 9Z8m1NOyA4+HYEVeGDYQO0ThFeW3CAG8faw5L9BqJAEjpUN9DOMQCEXOy /goMPjX61KnLZSq/Rj2hw5OX6jn7ru9zaN6cQKkhxW1N8oo4I8IXvo0d1 TqFWKnH7YGdXPakWQuRKMqpu67E4V8gyOKkxJLSl2U6rK0Z5oBM2YBmLU fi3mGGX5FnIxOZ6R4RIOHjyVwEiWrJ9eVYALO8+pP6kGDXbYIzfNc1dmh g==; X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="426921027" X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="426921027" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 23:11:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="18191691" Received: from xhh-dg264.sh.intel.com ([10.238.2.76]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 23:11:07 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Wed, 20 Dec 2023 15:10:39 +0800 Message-Id: <20231220071050.3175819-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 01/12] lavu/hwcontext_qsv: update AVQSVFramesContext to support dynamic frame pools X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Qd4MMFbkQmJ8 From: Haihao Xiang Add AVQSVFramesContext.info and update the description Signed-off-by: Haihao Xiang --- Rebased https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=9639 against the latest master with a few changes. doc/APIchanges | 3 +++ libavutil/hwcontext_qsv.c | 4 ++-- libavutil/hwcontext_qsv.h | 31 +++++++++++++++++++++++++++---- libavutil/version.h | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index a3e4ebbccd..b68156ee94 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-12-xx - xxxxxxxxxx - lavu 58.36.100 - hwcontext_qsv.h + Add AVQSVFramesContext.info + 2023-12-18 - 74279227dd2 - lavc 60.36.100 - packet.h Add AV_PKT_DATA_IAMF_MIX_GAIN_PARAM, AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM and AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM. diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index a67552b5ac..071489f070 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -613,7 +613,7 @@ static mfxStatus frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, QSVFramesContext *s = ctx->internal->priv; AVQSVFramesContext *hwctx = ctx->hwctx; mfxFrameInfo *i = &req->Info; - mfxFrameInfo *i1 = &hwctx->surfaces[0].Info; + mfxFrameInfo *i1 = hwctx->nb_surfaces ? &hwctx->surfaces[0].Info : hwctx->info; if (!(req->Type & MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET) || !(req->Type & (MFX_MEMTYPE_FROM_VPPIN | MFX_MEMTYPE_FROM_VPPOUT)) || @@ -1173,7 +1173,7 @@ static int qsv_init_internal_session(AVHWFramesContext *ctx, MFX_IOPATTERN_OUT_SYSTEM_MEMORY; par.AsyncDepth = 1; - par.vpp.In = frames_hwctx->surfaces[0].Info; + par.vpp.In = frames_hwctx->nb_surfaces ? frames_hwctx->surfaces[0].Info : *frames_hwctx->info; /* Apparently VPP requires the frame rate to be set to some value, otherwise * init will fail (probably for the framerate conversion filter). Since we diff --git a/libavutil/hwcontext_qsv.h b/libavutil/hwcontext_qsv.h index e2dba8ad83..5950e38500 100644 --- a/libavutil/hwcontext_qsv.h +++ b/libavutil/hwcontext_qsv.h @@ -25,8 +25,8 @@ * @file * An API-specific header for AV_HWDEVICE_TYPE_QSV. * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. + * AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points + * to a mfxFrameSurface1 struct. */ /** @@ -51,11 +51,34 @@ typedef struct AVQSVDeviceContext { * This struct is allocated as AVHWFramesContext.hwctx */ typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; + /** + * A pointer to a mfxFrameSurface1 or mfxFrameInfo struct + * + * When nb_surfaces is non-zero, it is a pointer to a mfxFrameSurface1 + * struct. + * + * When nb_surfaces is 0, it is a pointer to a mfxFrameInfo struct, all + * buffers allocated from the pool have the same mfxFrameInfo. + */ + union { + mfxFrameSurface1 *surfaces; + mfxFrameInfo *info; + }; + + /** + * Number of frames in the pool + * + * It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size + * for fixed frame pools. + * + * Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools + * on d3d11va or vaapi + */ int nb_surfaces; /** - * A combination of MFX_MEMTYPE_* describing the frame pool. + * Set by user. It is a combination of MFX_MEMTYPE_* describing the frame + * pool. */ int frame_type; } AVQSVFramesContext; diff --git a/libavutil/version.h b/libavutil/version.h index 7664cd97bd..3b4c50e9a9 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 35 +#define LIBAVUTIL_VERSION_MINOR 36 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \