From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2297C45271 for ; Mon, 16 Jan 2023 04:28:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5C94768BD34; Mon, 16 Jan 2023 06:28:25 +0200 (EET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B75FB68BD32 for ; Mon, 16 Jan 2023 06:28:17 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673843303; x=1705379303; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=3DP2MLDvJir+IW159Weya1YsSYtWhTbw2oBv/Izb9yE=; b=d88x8wVzEqgTYINzfl+Uwe4upqp0LL1nZJ0XrVZWllzvdcRFDzYpd5GN 3pVAv5JOI+D+mnskOl5s7vl2ZknffjztlkNvybv26y/2VcgRzMn6RPuvZ Sw7odH/CxooaJ2u1ZfrZcbDDkJ/MDazm1g6SUGuL4y1RMKOY0v/EtKMQb 8EWtJw3ZEEvK50B6EAjMvj26qKOyTWV++8dBC7IPvNuHygGgDezv6W/LF wrWXmO0U2HtFeSbNweWjMukR0Dw7tckptlxUbkTM85NXEzEE1RuBxTsu/ nt0sDxa8EZ4qFauPvBg/RDwpFsrfUx5i9X943iFleKF5QnVZxGNncZCqu w==; X-IronPort-AV: E=McAfee;i="6500,9779,10591"; a="386729669" X-IronPort-AV: E=Sophos;i="5.97,219,1669104000"; d="scan'208";a="386729669" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jan 2023 20:26:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10591"; a="691124838" X-IronPort-AV: E=Sophos;i="5.97,219,1669104000"; d="scan'208";a="691124838" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga001.jf.intel.com with ESMTP; 15 Jan 2023 20:26:57 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sun, 15 Jan 2023 20:26:57 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sun, 15 Jan 2023 20:26:56 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Sun, 15 Jan 2023 20:26:56 -0800 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Sun, 15 Jan 2023 20:26:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k4mA2mZ3+ATgtV5HhSWtTfp0MRlu7AVTsKF/4zLvZksxrRVxugYE3eeniJ00oF4zm3rLHprPSNXa81UE3bAznpFiW40fzBtH4SPm+0fB4bO+qc2zyrJ/mLuwSsdcsrc2GZQfVL1cETxuHHBrTu1ByLWv2ViSRVp0+kohv3KsFaJX9CAoM/VILOBi755gkFVqzfMgIfCWg6HyLGOhY4BGARi6isuapOomRKICI2pmpALA9zW+QtXHVtB8x3en7WDDR4Ql/A3Rz8DtmhVw3DENxMohWYYf26AQxRf7PHQ6Y/H9+GQe3Gwej1ZXGLXyHxpo3JoE+OzDwLfbWJcQvOBkIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3DP2MLDvJir+IW159Weya1YsSYtWhTbw2oBv/Izb9yE=; b=QhyLfaN1YMGkkU2kT1Lb9urLOKT2XOK+u3nzPsKg5FD3BYBFF6ZHodp919p2x8z39q0P6jmii9UX0eyxgIo5qiUKh2PVstGuNFbST8RCdk00r6bvXUi1JgNuy5j+lSEg9sBvhkSdJc1q/KojI4uJ7f5eL/V1uVvmjBPjk4ywvXvFebhBz/Ka/y8tMyZZht1hhIRHX7WiVpA7feUfuWVWOAPGrjTuFZU5lXmPzWHPYlU7UzBIJWdYZA0SsqdWS1dwTW1llFXsJGajJYvRD6bZpyvxr2owY+M44u2t2A9uyop3qgg11qAVj62XpQMM4ZDRXOd62Z5UW39YW3zKEzKl/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by CO1PR11MB5106.namprd11.prod.outlook.com (2603:10b6:303:93::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.23; Mon, 16 Jan 2023 04:26:53 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::e3ef:177c:4008:7ee9]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::e3ef:177c:4008:7ee9%5]) with mapi id 15.20.5986.023; Mon, 16 Jan 2023 04:26:53 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel][PATCH 1/2] lavfi/vaapi: remove duplicated code Thread-Index: AQHZJwj1sNdkhAKbT06LCWLfLmMhuK6gd3EA Date: Mon, 16 Jan 2023 04:26:53 +0000 Message-ID: References: <20230113043831.2389116-1-haihao.xiang@intel.com> In-Reply-To: <20230113043831.2389116-1-haihao.xiang@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5515:EE_|CO1PR11MB5106:EE_ x-ms-office365-filtering-correlation-id: 12ec65f2-f2bd-4812-6dff-08daf779e552 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ia7xeKRzNLC5++XLCfxKZmcW9rwzLCkIzdDkC4/HxqkLC+xoZeH5zgTPrKb2QAkWPav7porj6oYjh4JqUXkpAb6Pfkf3rR9qciYZshm3UEqX3WtWb2c97ybYTAZNzFI5u5/bXA2OsJs0HFIeyIX2BTRGVu/1grz9fPk1fvWHksXCI0E1AX+phMFymhP29fLCTQ86gbTMiU6Gr+tI2FdjKLIUYujYRqyKY8iwukgYrQoFcnkWhqzuXQk9G9kmRCblVHnOdPN9Y2KUAef9nFneGX1BuqB1ZinZTc9SLC06C3S+N+HXQV5ebZH1aaHZe6Ki0QRe42/d9EcM7iOt1qwRpWYhoCD2fOLkyu+zao2CWn07VlLFcZPPdTI0/HnRAMX0BMxp3V/oCZ7R1WEFN9IsqZMaASTSILeoLIeNrEXFYd+RnFVPIxrkO/TY5dyJ9eL4mDE/uUtTeneny0dbjm6iXhMFt6smuh/a/wFLFVEnmdSgXqv5HgE+fjiJraiz8ImPQ+GFIrjpsWaP8KgxwYphU9ANOx+N+JQ8LGJcPFXvBi3OF0uW1j6HU5g33SntkNIldjoCuAqaO/6Y7FkHwAhH77+QWkzsNrK2PJM2SclyqjvyjwTGV7S2pQQRlpSyYpcE/vwzI1WyIHdMQtG8Od0x1brQ0tzHl+Yv/76WTiuwjKQf/BVqPZhq64bv+gUhTU4zb/Lv8q9MMMfqHklk3bEgTA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(376002)(396003)(136003)(39860400002)(366004)(346002)(451199015)(71200400001)(2616005)(186003)(26005)(66476007)(64756008)(8676002)(6916009)(6512007)(66446008)(76116006)(91956017)(66556008)(66946007)(478600001)(6506007)(41300700001)(8936002)(5660300002)(30864003)(2906002)(83380400001)(316002)(122000001)(38070700005)(82960400001)(38100700002)(6486002)(86362001)(36756003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TmJkR25kZUQrRlZiVkNTUHZ5bjJPbjVkL08xc2ozU1ZWa3hjcUNaTVJSUFpT?= =?utf-8?B?RWJvOHFFZGZpMExVV2QrY29aTjVyeVludmhxZ1FtcnRWNnFXQjZKanhVeUhn?= =?utf-8?B?U0kzcE1hYldjeW1vdFJ1MzB1eEhyK1dVWGxDbHZNSTMweXR3bGczWjhQMXh0?= =?utf-8?B?S2tyemJrdVBNS2lVNDJJQVpuTEFxbERZUk9IOWgzYjZOSnc1emJ1YWRWNTNW?= =?utf-8?B?VG1qak11dHdUTlpzQitVTkd1M21iaE5WK2E2K1JJUCsyWk15QU1qMGErQnJ4?= =?utf-8?B?dWUvMlcrTmhET24vQzR6YW1ERFpPT0hhNHhKYVpMRzZlblJXYUlRZlJVVU4x?= =?utf-8?B?MmZnalB2YklGWStFMVQ0eTN0QWpmaXQ3ZjNDdUpnMk0xVW40ZzVEd0EzSWNm?= =?utf-8?B?eVBmUUNtK3F6SWZvVDRpOVBDbzlsU0hPMXNheUZZSmhmZkJndFp4dTN6TVBl?= =?utf-8?B?NXFodzBPUmRFTTU5ZjNORHlxbWFuRWlBdWYwKy9pVUdhNE51Y2g2YjNMMFNT?= =?utf-8?B?MFZKK1EvOG82MnhNYy92dllJank1R3JCTHg5YjA1MitSK1RIYTNhaUZmeTFS?= =?utf-8?B?RWZGMFNmVUQvblNhcFRtVHhUanBmb3ZtbUxoK0ZpTzEvelFSQzZab0lKblpt?= =?utf-8?B?TTB0RzBTZkhuckwxYTRvMDVOd2VXMHJsM3ZTck9QZ3YxUWFIWFVEV01hYlVN?= =?utf-8?B?SGpFRWxEWCtxN2s5d1hDbG82NXNJbnBwUVVjamovUGF4UGtnM3Zsa01lT0s4?= =?utf-8?B?bmJFbW92MCtiZUdVT2Nxd1lGQktsT243OGtiZitxcnlNR2c4RWtjWjdPR29z?= =?utf-8?B?NVhUQ2lkd1R2TDlDeVBFdi9DYXo3bUpXNWhJY0JaTmY3M3hNTDRmZVhyNWZW?= =?utf-8?B?akh0ckp4QS8vYjdNSGxib2hSQWVsSkVGN0xrUWVTU291TTdXME5zWWZtZXBU?= =?utf-8?B?eUREYjYvNm92QUZzUzZmSnVaWmJIUlVyN2EzTmpkeTdlVzFaUGh2MXdkeVE0?= =?utf-8?B?TlJIdXVINnFjdHMxcUZjemZwNEdFZ0cvT3hvZGxUSElrSGZYQ3JGMHdxZWNK?= =?utf-8?B?WjFIRTNqSHJGY1lxSTZ4LzArRlV2WWF5b2lGaitSUjR3RktYMzVCclM2NlQ0?= =?utf-8?B?dW04WmkzN254eXo3M3FWZnBSaEJPODhnVFNDTmhoQWdtcEZ5QXV6ME43ckcy?= =?utf-8?B?WTZnREM5T0dVd0FSQTBsTmhzdXEzQ0txM2h2WXo3bVZGMGJXbWlvMWtKcHV1?= =?utf-8?B?cTZZL0d2VEJwcnJOWmxxdzBhcnlVekJXTDAwNHVMQWxPY0xWVDZZWUllTlVC?= =?utf-8?B?TGdwMGcxOHUxV2gzMGdHM3lEWWtqSHlkUkhLVjVKcjBCblJzcER3dnRUUGFE?= =?utf-8?B?N3Izdjd1d0FMb2tqVlEyRThTam1RRmRnKzIvV3EwS3FUa3g3aDAzUkJUSGEw?= =?utf-8?B?c0xpNWViSXNXZzBTTFhjM2ptNUdIL00vWVFTNHcxRzlzaEtaK3Vhd3htZ0dx?= =?utf-8?B?Z2JDNWNETnJWcmNoZG42M0VTR3hlenZ6Wksvclk5RFFIOC9LdlNxdjlpUTNZ?= =?utf-8?B?UUdOL0luWDU1Q2RvVlBEeHNZT3FZTjRsS1o1VDRjV2UxVU14VGJYWmQxMnNH?= =?utf-8?B?VmJ4dEtsMk9wK2xId293eGw5Rm1SamdhSVhyVkJnR1FieTB1T1VGOTNpTXNE?= =?utf-8?B?WWcwRWZMdm5aMnA2RDU0QnE5UkpYYUI4bHpQVktkN1BWdkNEemVCekhObjBL?= =?utf-8?B?T3NlVjRPRzVtd3ZnQ0JJaGlPVlBYaGJJZVBPMklUUGVtWmp1cUcyN05rdjQ1?= =?utf-8?B?R3d6VnQ1dEJKUVk3K3FYR2hDak4rS0FZSS9yaVpwTGNEWjVoYWpBdk95bkVU?= =?utf-8?B?WnhzWGV0WVBISkVoRlZuNzlNWEI5Mkw0SjRMTU0rb1NONTg2akhtc0FHNTNq?= =?utf-8?B?NFlTRC9lY3p4VGdDMnB4MGk5alEwVnJuSVlreUJzdmZQVy9YeHVkMVFWTmRm?= =?utf-8?B?bGdkVmtxWCt4OGhYMnVlWlIySzQwZVFzV09iWXlFRkIzM3B2UlZWNkxmUys1?= =?utf-8?B?RktvemRwOGxEdkxtUGt2VFRhWXl6Y2xMbXRPVmtBdlgvd3RiUFlVNWRZVmVN?= =?utf-8?B?Qlg2cG1qM3BieWpBUWQxNWdKQ2Y2WHMvWEdPN2oyUWs3b203eE84c2ZSeEpl?= =?utf-8?B?bGc9PQ==?= Content-ID: <99FF64885675944A82DBCE9E1C2FA9BE@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12ec65f2-f2bd-4812-6dff-08daf779e552 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2023 04:26:53.6210 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xFXc0l68KiDBq7EoafmOLTpI/0n0wAKj9o57PqFG+2YwdxRgDphkE9ccjbnujxi/4Th7lDPkOjt+1ZqDOGKasw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB5106 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH 1/2] lavfi/vaapi: remove duplicated code 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On Vr, 2023-01-13 at 12:38 +0800, Xiang, Haihao wrote: > From: Haihao Xiang > > Add a ff_ function to handle mulitple pipeline parameters. No functional > changes. > > Signed-off-by: Haihao Xiang > --- > libavfilter/vaapi_vpp.c | 90 ++++++++++++++++-------- > libavfilter/vaapi_vpp.h | 5 ++ > libavfilter/vf_overlay_vaapi.c | 122 +++------------------------------ > 3 files changed, 77 insertions(+), 140 deletions(-) > > diff --git a/libavfilter/vaapi_vpp.c b/libavfilter/vaapi_vpp.c > index 1610df4c85..a323dab8b8 100644 > --- a/libavfilter/vaapi_vpp.c > +++ b/libavfilter/vaapi_vpp.c > @@ -588,17 +588,53 @@ int ff_vaapi_vpp_make_param_buffers(AVFilterContext > *avctx, > return 0; > } > > +static int vaapi_vpp_render_single_pipeline_buffer(AVFilterContext *avctx, > + VAProcPipelineParameterBuf > fer *params, > + VABufferID *params_id) > +{ > + VAAPIVPPContext *ctx = avctx->priv; > + VAStatus vas; > > -int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > - VAProcPipelineParameterBuffer *params, > - AVFrame *output_frame) > + vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context, > + VAProcPipelineParameterBufferType, > + sizeof(*params), 1, params, params_id); > + if (vas != VA_STATUS_SUCCESS) { > + av_log(avctx, AV_LOG_ERROR, "Failed to create parameter buffer: " > + "%d (%s).\n", vas, vaErrorStr(vas)); > + *params_id = VA_INVALID_ID; > + > + return AVERROR(EIO); > + } > + av_log(avctx, AV_LOG_DEBUG, "Pipeline parameter buffer is %#x.\n", > *params_id); > + > + vas = vaRenderPicture(ctx->hwctx->display, ctx->va_context, params_id, > 1); > + if (vas != VA_STATUS_SUCCESS) { > + av_log(avctx, AV_LOG_ERROR, "Failed to render parameter buffer: " > + "%d (%s).\n", vas, vaErrorStr(vas)); > + return AVERROR(EIO); > + } > + > + return 0; > +} > + > +int ff_vaapi_vpp_render_pictures(AVFilterContext *avctx, > + VAProcPipelineParameterBuffer *params_list, > + int cout, > + AVFrame *output_frame) > { > VAAPIVPPContext *ctx = avctx->priv; > VASurfaceID output_surface; > - VABufferID params_id; > + VABufferID *params_ids; > VAStatus vas; > int err; > > + params_ids = (VABufferID *)av_malloc_array(cout, sizeof(VABufferID)); > + if (!params_ids) > + return AVERROR(ENOMEM); > + > + for (int i = 0; i < cout; i++) > + params_ids[i] = VA_INVALID_ID; > + > output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3]; > > vas = vaBeginPicture(ctx->hwctx->display, > @@ -610,25 +646,10 @@ int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > goto fail; > } > > - vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context, > - VAProcPipelineParameterBufferType, > - sizeof(*params), 1, params, ¶ms_id); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to create parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > - } > - av_log(avctx, AV_LOG_DEBUG, "Pipeline parameter buffer is %#x.\n", > - params_id); > - > - vas = vaRenderPicture(ctx->hwctx->display, ctx->va_context, > - ¶ms_id, 1); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to render parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > + for (int i = 0; i < cout; i++) { > + err = vaapi_vpp_render_single_pipeline_buffer(avctx, ¶ms_list[i], > ¶ms_ids[i]); > + if (err) > + goto fail_after_begin; > } > > vas = vaEndPicture(ctx->hwctx->display, ctx->va_context); > @@ -641,14 +662,17 @@ int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > > if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks & > AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) { > - vas = vaDestroyBuffer(ctx->hwctx->display, params_id); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to free parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - // And ignore. > + for (int i = 0; i < cout && params_ids[i] != VA_INVALID_ID; i++) { > + vas = vaDestroyBuffer(ctx->hwctx->display, params_ids[i]); > + if (vas != VA_STATUS_SUCCESS) { > + av_log(avctx, AV_LOG_ERROR, "Failed to free parameter buffer: > " > + "%d (%s).\n", vas, vaErrorStr(vas)); > + // And ignore. > + } > } > } > > + av_freep(¶ms_ids); > return 0; > > // We want to make sure that if vaBeginPicture has been called, we also > @@ -656,13 +680,21 @@ int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > // do something else nasty, but once we're in this failure case there > // isn't much else we can do. > fail_after_begin: > - vaRenderPicture(ctx->hwctx->display, ctx->va_context, ¶ms_id, 1); > + vaRenderPicture(ctx->hwctx->display, ctx->va_context, ¶ms_ids[0], 1); > fail_after_render: > vaEndPicture(ctx->hwctx->display, ctx->va_context); > fail: > + av_freep(¶ms_ids); > return err; > } > > +int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > + VAProcPipelineParameterBuffer *params, > + AVFrame *output_frame) > +{ > + return ff_vaapi_vpp_render_pictures(avctx, params, 1, output_frame); > +} > + > void ff_vaapi_vpp_ctx_init(AVFilterContext *avctx) > { > int i; > diff --git a/libavfilter/vaapi_vpp.h b/libavfilter/vaapi_vpp.h > index c3da91717c..ead07036dc 100644 > --- a/libavfilter/vaapi_vpp.h > +++ b/libavfilter/vaapi_vpp.h > @@ -83,4 +83,9 @@ int ff_vaapi_vpp_render_picture(AVFilterContext *avctx, > VAProcPipelineParameterBuffer *params, > AVFrame *output_frame); > > +int ff_vaapi_vpp_render_pictures(AVFilterContext *avctx, > + VAProcPipelineParameterBuffer *params_list, > + int count, > + AVFrame *output_frame); > + > #endif /* AVFILTER_VAAPI_VPP_H */ > diff --git a/libavfilter/vf_overlay_vaapi.c b/libavfilter/vf_overlay_vaapi.c > index 307f3cf7fc..79cf66d068 100644 > --- a/libavfilter/vf_overlay_vaapi.c > +++ b/libavfilter/vf_overlay_vaapi.c > @@ -159,106 +159,6 @@ static int > overlay_vaapi_build_filter_params(AVFilterContext *avctx) > return 0; > } > > -static int overlay_vaapi_render_picture(AVFilterContext *avctx, > - VAProcPipelineParameterBuffer > *params, > - VAProcPipelineParameterBuffer > *subpic_params, > - AVFrame *output_frame) > -{ > - VAAPIVPPContext *ctx = avctx->priv; > - VASurfaceID output_surface; > - VABufferID params_id; > - VABufferID subpic_params_id; > - VAStatus vas; > - int err = 0; > - > - output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3]; > - > - vas = vaBeginPicture(ctx->hwctx->display, > - ctx->va_context, output_surface); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to attach new picture: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail; > - } > - > - vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context, > - VAProcPipelineParameterBufferType, > - sizeof(*params), 1, params, ¶ms_id); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to create parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > - } > - av_log(avctx, AV_LOG_DEBUG, "Pipeline parameter buffer is %#x.\n", > - params_id); > - > - > - vas = vaRenderPicture(ctx->hwctx->display, ctx->va_context, > - ¶ms_id, 1); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to render parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > - } > - > - if (subpic_params) { > - vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context, > - VAProcPipelineParameterBufferType, > - sizeof(*subpic_params), 1, subpic_params, > &subpic_params_id); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to create parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > - } > - av_log(avctx, AV_LOG_DEBUG, "Pipeline subpic parameter buffer is > %#x.\n", > - subpic_params_id); > - > - vas = vaRenderPicture(ctx->hwctx->display, ctx->va_context, > - &subpic_params_id, 1); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to render subpic parameter > buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_begin; > - } > - } > - > - vas = vaEndPicture(ctx->hwctx->display, ctx->va_context); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to start picture processing: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - err = AVERROR(EIO); > - goto fail_after_render; > - } > - > - if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks & > - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) { > - vas = vaDestroyBuffer(ctx->hwctx->display, params_id); > - if (vas != VA_STATUS_SUCCESS) { > - av_log(avctx, AV_LOG_ERROR, "Failed to free parameter buffer: " > - "%d (%s).\n", vas, vaErrorStr(vas)); > - // And ignore. > - } > - } > - > - return 0; > - > - // We want to make sure that if vaBeginPicture has been called, we also > - // call vaRenderPicture and vaEndPicture. These calls may well fail or > - // do something else nasty, but once we're in this failure case there > - // isn't much else we can do. > -fail_after_begin: > - vaRenderPicture(ctx->hwctx->display, ctx->va_context, ¶ms_id, 1); > -fail_after_render: > - vaEndPicture(ctx->hwctx->display, ctx->va_context); > -fail: > - return err; > -} > - > static int overlay_vaapi_blend(FFFrameSync *fs) > { > AVFilterContext *avctx = fs->parent; > @@ -267,7 +167,7 @@ static int overlay_vaapi_blend(FFFrameSync *fs) > VAAPIVPPContext *vpp_ctx = avctx->priv; > AVFrame *input_main, *input_overlay; > AVFrame *output; > - VAProcPipelineParameterBuffer params, subpic_params; > + VAProcPipelineParameterBuffer params[2]; > VABlendState blend_state = { 0 }; /**< Blend State */ > VARectangle overlay_region, output_region; > int err; > @@ -296,7 +196,7 @@ static int overlay_vaapi_blend(FFFrameSync *fs) > if (err < 0) > goto fail; > > - err = ff_vaapi_vpp_init_params(avctx, ¶ms, > + err = ff_vaapi_vpp_init_params(avctx, ¶ms[0], > input_main, output); > if (err < 0) > goto fail; > @@ -308,11 +208,11 @@ static int overlay_vaapi_blend(FFFrameSync *fs) > .height = output->height, > }; > > - params.filters = &vpp_ctx->filter_buffers[0]; > - params.num_filters = vpp_ctx->nb_filter_buffers; > + params[0].filters = &vpp_ctx->filter_buffers[0]; > + params[0].num_filters = vpp_ctx->nb_filter_buffers; > > - params.output_region = &output_region; > - params.output_background_color = VAAPI_VPP_BACKGROUND_BLACK; > + params[0].output_region = &output_region; > + params[0].output_background_color = VAAPI_VPP_BACKGROUND_BLACK; > > if (input_overlay) { > av_log(avctx, AV_LOG_DEBUG, "Filter overlay: %s, %ux%u > (%"PRId64").\n", > @@ -333,17 +233,17 @@ static int overlay_vaapi_blend(FFFrameSync *fs) > "will crop the overlay image according based on the main > image.\n"); > } > > - memcpy(&subpic_params, ¶ms, sizeof(subpic_params)); > + memcpy(¶ms[1], ¶ms[0], sizeof(params[0])); > > blend_state.flags = ctx->blend_flags; > blend_state.global_alpha = ctx->blend_alpha; > - subpic_params.blend_state = &blend_state; > + params[1].blend_state = &blend_state; > > - subpic_params.surface = (VASurfaceID)(uintptr_t)input_overlay- > >data[3]; > - subpic_params.output_region = &overlay_region; > + params[1].surface = (VASurfaceID)(uintptr_t)input_overlay- > >data[3]; > + params[1].output_region = &overlay_region; > } > > - err = overlay_vaapi_render_picture(avctx, ¶ms, input_overlay ? > &subpic_params : NULL, output); > + err = ff_vaapi_vpp_render_pictures(avctx, params, input_overlay ? 2 : 1, > output); > if (err < 0) > goto fail; > Will apply if no comment / objection. -Haihao _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".