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 92AE242DEB for ; Wed, 8 Jun 2022 08:41:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7E4D768B6B6; Wed, 8 Jun 2022 11:41:49 +0300 (EEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BC5BD68B3FF for ; Wed, 8 Jun 2022 11:41:41 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654677707; x=1686213707; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=1dCj7lHdNQFenqGE8JYGg7w9kDMtCqMEZieQYxcEAbw=; b=cAqncXxOumgZ4z2aLc3JljaWztrSpJT84q2PaJUdw9ZlrRryEFJJLebQ PSOct3+lW5doNO1M+1mwx9ULMQOx/3+HICXhQC3LMnblnCvDJ7HypIW0o yXqiPsXp08qyiA5zkYvVbZ0y1/h1skIBDy27yhPxRkuNk5wpvb8R8kGxJ TRVbY+7l4Bo5RhhTgM1OtcZTJdv4MN0geyMwkIVs5j6OEcQNm99ieltAZ vENkA+UNCwRfzKIsphPux8N8vEhNthaEtTvEVGBi7lV1COKbPYTaXlEx9 JdTptFf9bJVfaZZxlulISEIrWWEdzY8gyjeoN4OI2iIUxnaZRmlwkhbFM w==; X-IronPort-AV: E=McAfee;i="6400,9594,10371"; a="363150560" X-IronPort-AV: E=Sophos;i="5.91,285,1647327600"; d="scan'208";a="363150560" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2022 01:41:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,285,1647327600"; d="scan'208";a="683213220" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by fmsmga002.fm.intel.com with ESMTP; 08 Jun 2022 01:41:38 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 8 Jun 2022 01:41:38 -0700 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.2308.27 via Frontend Transport; Wed, 8 Jun 2022 01:41:38 -0700 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.2308.27; Wed, 8 Jun 2022 01:41:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KtL6nwvZl5LKxsBFIHf8HnaMcYJTF4PSiFjb4P4Yf/DskiJJPOUSBU+bkLDWACv3t2EozOwPBo1PMYjG6YAGMTYdkz24Qgiz5DQXn59Upxw52UeW4W1Iw3vKip10ii6SyaZcqjxd+v1pRAg/CHO7D28UlhsCnwUcXrWAw3VHFPHGmoSOvbJDDG6YFMswMvoLtJD3Y0A52Z+jm9c5/Rh/5uKNrWIpJagchZGv9TjC6vrSSD7zCoLmNWoV+7cEp75i3sEIn3oj6hmquhsWx5QwsCrQehM6THxuvao7M5/p5WCfBsAO9TjG3NeeiVp4R+TmfF8vNdwOMf9VieLaGfNYvw== 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=1dCj7lHdNQFenqGE8JYGg7w9kDMtCqMEZieQYxcEAbw=; b=iNr4mg0M0k/f8aI/xkLp0FHxlVWJxpnRLW2CoJSxnB1xUCEDefLl3I9c+1rcvtTfcRg9WXcsySPPAElyHXtLCtosfFr2xrchxxQTYQlPL8gMXfWsCyhzjjn+AeMwKCMwlrTKa+4H6Oo0qUqyYxkHhyt3TtoRrEahKY0hdBC+zh8bHcEoUnKMSUFsfgLvztsAdQg96myYKkzk70Rpw7FSsOVxonac0upR5JFoUBv1boLVdGau44spEfzF7G9nHmmkcxy4bG71gsCQ/x6Qbq0obtSKAQKo83f48eQVta3pJRUH4ddUUuWhGGf4P42gjB/moQrx2L6bjzLIl76Ggomo5g== 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 MWHPR11MB1965.namprd11.prod.outlook.com (2603:10b6:300:110::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Wed, 8 Jun 2022 08:41:30 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::2d06:ec38:937a:da73]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::2d06:ec38:937a:da73%6]) with mapi id 15.20.5314.019; Wed, 8 Jun 2022 08:41:30 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH] avcodec/qsvenc: make QSV encoder encode VAAPI and D3D11 frames directly Thread-Index: AQHYelBaaOTlgTZub0mfwS8574Qq4q1E9t6AgAA7loA= Date: Wed, 8 Jun 2022 08:41:30 +0000 Message-ID: <078794290ef4b70ba19dfd436313a58c2ab8bdff.camel@intel.com> References: <20220607092216.405-1-tong1.wu@intel.com> In-Reply-To: Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e934b097-554d-4b1e-d824-08da492aaf25 x-ms-traffictypediagnostic: MWHPR11MB1965:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ZBiJ1Ql+doHHZ5u1WXGo+sSRYOz3gd4MvkhvKSa2NSJWkvIMBTzljQwIyGNSI2REQtLbzPK/gEBHUndswS5az45J2ayEVWrNQpepH/RvzG0NCuyJVRvzuHwO6epXBaPQ0RXvsHPVd3HTEb0XcPGUCzfA8gXBTatrXXlrJ4aMGxKppLms0FIKm3Bzl25aioV/fsT9nu8Psn/5FAIiJxDh9q5ObTrno/jhNaQhKEazpmxLCLpaXri/w4G6FzID1FDAw8qXpiJqryhkD/OA1FjqCYBTGIIygQUnKcMgtrqR9adpu9sEbYwnft+6qh5jaWrY0P3u7SKl54LHLwNfRncJbz7xdWbzX42Mzfk1NyyrfbTV1LkZjVEfqHWvAMg1MnJ7KDoi5+j+7EZaycQADMw9zrGSHz6Fbzp9uFFGXTPDha6dX8aHQvWLhlTJ0Orqt4QOKV6p8FiT/S7hqbJXC0e7wepBgen3Rc7ULXCgvlY/Uzk1hezjTGXDp5CGlVDgcckRgGDRLWQdqk/E9vzJXfbC6+sBxIh9brvl1BiwswGnsHjEx0FFFUFOb6JPQDZveIT2DfcgnKFZNcphdpiIg1lUkqEhToAe8tRtTfnE2yjho/vMqwvn4Mpllz3wk+6K6P/L+p4c6Ck8dnCYSDTT52Zd20pDXZULbhswnFO6KYsVU0HXzSMVs/HRbNV+RRRwhAEDdVZQTXtRwTf0lC1q3HEILsKpzvFLkvYadmWlg+se/a8= 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:(13230001)(366004)(82960400001)(38070700005)(53546011)(6486002)(54906003)(122000001)(38100700002)(36756003)(508600001)(8936002)(5660300002)(64756008)(83380400001)(66476007)(66946007)(66446008)(66556008)(4326008)(2906002)(186003)(6916009)(107886003)(8676002)(86362001)(6506007)(6512007)(26005)(316002)(2616005)(91956017)(76116006)(71200400001)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eUt1MnhCWlZKYW4wcTBwemRCdHZzcFJacnlsUTNMVG9xTlN0MkFkOEpwQlp6?= =?utf-8?B?VG9vSXpUL0lXZXpZUmxzMXlTSXg3am41K1cwNDVhNWZSQVVBV0NoNzdhaWdL?= =?utf-8?B?ZHpBRmxVSEZwUkRCTTk2MFA2V3lvNHVuRUdvbFVUSFRsUzkrZDFKUEJ0R0pq?= =?utf-8?B?ZFZQcFJMNW9kTFRrRFBUQjh3OExNdTN5TWcyV2JmaVNiTG1YK2FadnZPKzBn?= =?utf-8?B?ekxnSWNYM2pqSG1TTHV6UkNVaDZtMXpETmdaTC92SWcvcUp0UEU3aWMxVjY2?= =?utf-8?B?eTAyaDdPWURqWENZZC9YdWZiZEYxMGpLUTVIc05tMmFRRXVVUm1mNWdObXR0?= =?utf-8?B?UW1WQVFjTGxZUjlEd2sydSttOERLekM1UG5TTG0rVEZrRTdkODc1TU05SkQ4?= =?utf-8?B?OGo0TERRYTArQlhaWDZZSzFhYzBGYi9tcGk0UmJyZDl6SWdLRGJzcDlBaGpX?= =?utf-8?B?TmY3SGdTa1g5NWdVZGhZTGo2b3ZpSGdIM2FKMExRZXhhVDZKNDRIcVRmWmhk?= =?utf-8?B?Tnloa0p1WTBZekZoa285Q2o3Q0NQbWtWUUQ0dk9VZWY3Wk5GNGNsTHRCbHM1?= =?utf-8?B?c09QaDVGNU4wK2RqR1VTaEp6MGhZOGpBZWJONE9MVytQRmhjSjlUUnZZRVBL?= =?utf-8?B?S1plZkRRc1F5SFlzajF1cUpGQmFnaDRQcDR2SXZBSXRPdGdsblIrRHA4RE9K?= =?utf-8?B?NWpxWG1GbW00Z3ZwdDNGc3lCWit6SmdDbWdoaVp4MXNqWGIwZ3RQNGVSN3Bo?= =?utf-8?B?aUJ1cnA1RXlMMXlVdkdtaHZmN2Z0YkNSZSt2QXhveS9MN3hMN3ZyMVFUOVBo?= =?utf-8?B?UGZ2VlVRTjFWSXg2bi9Tbk80cEsxZTB5cUtXa2lyOWova3prQkY5d0ZBWTIv?= =?utf-8?B?YUtvb1F5VExYVGMvZndMRmhaVFR6OWdONXVSTVhyTm1Jb01hUFVJKzJMNzQ0?= =?utf-8?B?ZGlIREp6MUdIVGNtWHhCQ0dFYlV3TEFUc0p2MHhJNlcyTExDZHV1RGlrL0dD?= =?utf-8?B?SlRsL0FUSU03WEwzeVFQV1hsTnFYNW9pRXVYcGxhT01uUWF1dkllUVBqMlRW?= =?utf-8?B?eE94dG11eTl6dGwwb3hla09meVV5eTdYWDQwVEMxR3ZBRFVycEovMXE2azla?= =?utf-8?B?cENqbklCaUlBK2hqV3dWbGhJd1FIS3JCcDB0NmFsd2JnNERaZjI1N1JrbHFt?= =?utf-8?B?RG1QYjlpYmVLM2xhYmxyQVU5dUVQeHpwQ3pBZXN3Y1IvcFFoeE03WE1pWVZl?= =?utf-8?B?RVVTOXJOREJ0MVhId3M2Wldsa3FydHNNNGxtQ0FQMWY4bnJMZTdIK2dicmhS?= =?utf-8?B?TzlQV2JpcTl5TEYyZ2tIeEo1SVlXTGNIdHF3RjhPQ1h1bjVjcEk2b0FQWVpn?= =?utf-8?B?Ym10U21ONzlPdDgxWGRyTmdXcFBld1p1WXQyV1AzSXcwa0FMWXQ5cU94UXBI?= =?utf-8?B?a3orQkxFYVJOL0xUZ0NPL2RFVk5xUjN5dEZkV1BlaU13Rll4OGcrVFI0aXN0?= =?utf-8?B?RytPUGduMTYyclVQdEoyd2ZVeXNDWVRyMy8ybTVYWGdxZHJxZnNuWngxSDFi?= =?utf-8?B?SnQ4dUE1Rk9UYzlPU0UrSE1LU3ZMb0w3aDUrVWVBTk1MRmY1NExCcGRLVEhW?= =?utf-8?B?bmJPUDJBbTcxZ0RYa21HYS8vZ2xieG1Fc1JHbkppc0Y3N3ExL09KcHcwaEdU?= =?utf-8?B?cWV5VTZkVjZqTEtqU25tZ2tMaUJpdXdQQTJYc2RNRDgzSkdqdlpJd3lxbXRR?= =?utf-8?B?UEFIVGY0a1M1QUFXcjhuTFZ3L0ZwTWNJaFQ0eEFQM0JzUktWK3NNTU1EYW90?= =?utf-8?B?aTczR2k3M1V0SHVqTlByaTZXUFl6NDdHOGFya1lCTHdYT1cxUlZHT0l1TTI3?= =?utf-8?B?MWR3V0FqSzRNUE5Pa0s3MW9rTVhUbFNyaVRtZ0U3R2xnR3hjUk9rT2hwV3Rk?= =?utf-8?B?UERjNzhEc2xWT1o3VWg1OHBvTVRpdGtXMnN0bVNFSGx0Vm1oT3Y0MWdjTVVB?= =?utf-8?B?eFRYUHhVSFZBcGFDYU9yQS9BSGFia2VYYURGMnArd2JVbjZvS0pOQlF4bWF2?= =?utf-8?B?TDlYdGZiOWZMZ0ZIVWhuWC9KUk1MSFRUMFFkYjJ2VUxtUERwc2RHRHA0eUR2?= =?utf-8?B?b0RCbE1JeFNUbXYxckQzd245UVFXZzArQllaM2s2QVJBQU5PSGFXbkJETXFT?= =?utf-8?B?RFllZ3B3V1YrRy9nRVkwRUxKa1FSVTVTeWV2VkwrOGRwVkdFeFc3amwwYlFo?= =?utf-8?B?TTJGbCs1b0dINTdnWkQrQ1VrRnhYWU1pTUFkS3hIY2NVbk5vclIwV1VpeVls?= =?utf-8?B?S0RHMWMxWjNNdjZkYWE4dlRWQkpkVWk4TGROcG5aa3pscVRmQW93d3RwSHla?= =?utf-8?Q?lKWDirrLD5DE1n20=3D?= Content-ID: 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: e934b097-554d-4b1e-d824-08da492aaf25 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2022 08:41:30.2137 (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: KE4SknbQc/NFhSMpMuYZEoE4uFi3uzJbJlIPBiR7mYBrwHWb1GgFtfNMdPGRNMxCvAPgZZMxY+34OOHAcvTwYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1965 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH] avcodec/qsvenc: make QSV encoder encode VAAPI and D3D11 frames directly 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: "Wu, Tong1" , "Chen, Wenbin" 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 Wed, 2022-06-08 at 05:08 +0000, Soft Works wrote: > > -----Original Message----- > > From: ffmpeg-devel On Behalf Of Tong Wu > > Sent: Tuesday, June 7, 2022 11:22 AM > > To: ffmpeg-devel@ffmpeg.org > > Cc: Tong Wu ; Wenbin Chen > > Subject: [FFmpeg-devel] [PATCH] avcodec/qsvenc: make QSV encoder encode > > VAAPI > > and D3D11 frames directly > > > > QSV encoder is able to encode frames with VAAPI or D3D11 pixel format > > directly. This patch adds support for qsv encoder to accept VAAPI and > > D3D11 pixel formats as input. > > > > Signed-off-by: Wenbin Chen > > Signed-off-by: Tong Wu > > --- > > libavcodec/qsvenc.c | 59 ++++++++++++++++++++++++++++++++++----- > > libavcodec/qsvenc_h264.c | 2 ++ > > libavcodec/qsvenc_hevc.c | 2 ++ > > libavcodec/qsvenc_jpeg.c | 2 ++ > > libavcodec/qsvenc_mpeg2.c | 2 ++ > > libavcodec/qsvenc_vp9.c | 2 ++ > > 6 files changed, 62 insertions(+), 7 deletions(-) > > > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > > index 2b3b06767d..132d9ba93b 100644 > > --- a/libavcodec/qsvenc.c > > +++ b/libavcodec/qsvenc.c > > @@ -524,7 +524,9 @@ static int check_enc_param(AVCodecContext *avctx, > > QSVEncContext *q) > > > > static int init_video_param_jpeg(AVCodecContext *avctx, QSVEncContext *q) > > { > > - enum AVPixelFormat sw_format = avctx->pix_fmt == AV_PIX_FMT_QSV ? > > + enum AVPixelFormat sw_format = avctx->pix_fmt == AV_PIX_FMT_QSV || > > + avctx->pix_fmt == AV_PIX_FMT_VAAPI || > > + avctx->pix_fmt == AV_PIX_FMT_D3D11 ? > > avctx->sw_pix_fmt : avctx->pix_fmt; > > const AVPixFmtDescriptor *desc; > > int ret; > > @@ -591,7 +593,9 @@ static int init_video_param_jpeg(AVCodecContext *avctx, > > QSVEncContext *q) > > > > static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) > > { > > - enum AVPixelFormat sw_format = avctx->pix_fmt == AV_PIX_FMT_QSV ? > > + enum AVPixelFormat sw_format = avctx->pix_fmt == AV_PIX_FMT_QSV || > > + avctx->pix_fmt == AV_PIX_FMT_VAAPI || > > + avctx->pix_fmt == AV_PIX_FMT_D3D11 ? > > avctx->sw_pix_fmt : avctx->pix_fmt; > > const AVPixFmtDescriptor *desc; > > float quant; > > @@ -1247,7 +1251,31 @@ int ff_qsv_enc_init(AVCodecContext *avctx, > > QSVEncContext *q) > > > > if (avctx->hw_frames_ctx) { > > AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx- > > > hw_frames_ctx->data; > > > > - AVQSVFramesContext *frames_hwctx = frames_ctx->hwctx; > > + AVQSVFramesContext *frames_hwctx = NULL; > > + > > + if (frames_ctx->format == AV_PIX_FMT_VAAPI || frames_ctx->format == > > AV_PIX_FMT_D3D11) { > > + AVBufferRef *derive_device_ref = NULL; > > + AVBufferRef *derive_frames_ref = NULL; > > + ret = av_hwdevice_ctx_create_derived(&derive_device_ref, > > + AV_HWDEVICE_TYPE_QSV, > > frames_ctx->device_ref, 0); > > + if (ret < 0) { > > + av_log(avctx, AV_LOG_ERROR, "Failed to derive QSV device > > context: %d.\n", ret); > > + return ret; > > + } > > + ret = av_hwframe_ctx_create_derived(&derive_frames_ref, > > + AV_PIX_FMT_QSV, > > derive_device_ref, avctx->hw_frames_ctx, 0); > > + if (ret < 0) { > > + av_log(avctx, AV_LOG_ERROR, "Failed to derive QSV frames > > context: %d.\n", ret); > > + av_buffer_unref(&derive_device_ref); > > + return ret; > > + } > > + av_buffer_unref(&avctx->hw_device_ctx); > > + avctx->hw_device_ctx = derive_device_ref; > > + av_buffer_unref(&avctx->hw_frames_ctx); > > + avctx->hw_frames_ctx = derive_frames_ref; > > + frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; > > + } > > + frames_hwctx = frames_ctx->hwctx; > > > > if (!iopattern) { > > if (frames_hwctx->frame_type & MFX_MEMTYPE_OPAQUE_FRAME) > > @@ -1437,10 +1465,25 @@ static int submit_frame(QSVEncContext *q, const > > AVFrame *frame, > > if (ret < 0) > > return ret; > > > > - if (frame->format == AV_PIX_FMT_QSV) { > > - ret = av_frame_ref(qf->frame, frame); > > - if (ret < 0) > > - return ret; > > + if (frame->format == AV_PIX_FMT_QSV || frame->format == > > AV_PIX_FMT_VAAPI > > > > frame->format == AV_PIX_FMT_D3D11) { > > > > + if (frame->format == AV_PIX_FMT_QSV) { > > + ret = av_frame_ref(qf->frame, frame); > > + if (ret < 0) > > + return ret; > > + } else { > > + qf->frame->format = AV_PIX_FMT_QSV; > > + qf->frame->hw_frames_ctx = av_buffer_ref(q->avctx- > > > hw_frames_ctx); > > > > + if (!qf->frame->hw_frames_ctx) > > + return AVERROR(ENOMEM); > > + ret = av_hwframe_map(qf->frame, frame, 0); > > + if (ret < 0) { > > + av_log(q->avctx, AV_LOG_ERROR, "Failed to map to QSV > > frames\n"); > > + return ret; > > + } > > + ret = av_frame_copy_props(qf->frame, frame); > > + if (ret < 0) > > + return ret; > > + } > > > > qf->surface = *(mfxFrameSurface1*)qf->frame->data[3]; > > > > @@ -1735,6 +1778,8 @@ int ff_qsv_enc_close(AVCodecContext *avctx, > > QSVEncContext *q) > > > > const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[] = { > > HW_CONFIG_ENCODER_FRAMES(QSV, QSV), > > + HW_CONFIG_ENCODER_FRAMES(VAAPI,VAAPI), > > + HW_CONFIG_ENCODER_FRAMES(D3D11,D3D11VA), > > HW_CONFIG_ENCODER_DEVICE(NV12, QSV), > > HW_CONFIG_ENCODER_DEVICE(P010, QSV), > > NULL, > > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c > > index cf77ea575b..93ba8d8ded 100644 > > --- a/libavcodec/qsvenc_h264.c > > +++ b/libavcodec/qsvenc_h264.c > > @@ -196,6 +196,8 @@ const FFCodec ff_h264_qsv_encoder = { > > .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > > AV_PIX_FMT_P010, > > AV_PIX_FMT_QSV, > > + AV_PIX_FMT_VAAPI, > > + AV_PIX_FMT_D3D11, > > AV_PIX_FMT_NONE }, > > .p.priv_class = &class, > > .defaults = qsv_enc_defaults, > > diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c > > index a6bf39c148..63b6ad9150 100644 > > --- a/libavcodec/qsvenc_hevc.c > > +++ b/libavcodec/qsvenc_hevc.c > > @@ -309,6 +309,8 @@ const FFCodec ff_hevc_qsv_encoder = { > > AV_PIX_FMT_YUYV422, > > AV_PIX_FMT_Y210, > > AV_PIX_FMT_QSV, > > + AV_PIX_FMT_VAAPI, > > + AV_PIX_FMT_D3D11, > > AV_PIX_FMT_BGRA, > > AV_PIX_FMT_X2RGB10, > > AV_PIX_FMT_NONE }, > > diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c > > index 825eb8dc06..5b7611bb85 100644 > > --- a/libavcodec/qsvenc_jpeg.c > > +++ b/libavcodec/qsvenc_jpeg.c > > @@ -91,6 +91,8 @@ const FFCodec ff_mjpeg_qsv_encoder = { > > .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > > .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > > AV_PIX_FMT_QSV, > > + AV_PIX_FMT_VAAPI, > > + AV_PIX_FMT_D3D11, > > AV_PIX_FMT_NONE }, > > .p.priv_class = &class, > > .defaults = qsv_enc_defaults, > > diff --git a/libavcodec/qsvenc_mpeg2.c b/libavcodec/qsvenc_mpeg2.c > > index 5cb12a2582..cba4001ee1 100644 > > --- a/libavcodec/qsvenc_mpeg2.c > > +++ b/libavcodec/qsvenc_mpeg2.c > > @@ -105,6 +105,8 @@ const FFCodec ff_mpeg2_qsv_encoder = { > > .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > > .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > > AV_PIX_FMT_QSV, > > + AV_PIX_FMT_VAAPI, > > + AV_PIX_FMT_D3D11, > > AV_PIX_FMT_NONE }, > > .p.priv_class = &class, > > .defaults = qsv_enc_defaults, > > diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c > > index 4b2a6ce77f..2825b98a4a 100644 > > --- a/libavcodec/qsvenc_vp9.c > > +++ b/libavcodec/qsvenc_vp9.c > > @@ -115,6 +115,8 @@ const FFCodec ff_vp9_qsv_encoder = { > > .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > > AV_PIX_FMT_P010, > > AV_PIX_FMT_QSV, > > + AV_PIX_FMT_VAAPI, > > + AV_PIX_FMT_D3D11, > > AV_PIX_FMT_NONE }, > > .p.priv_class = &class, > > .defaults = qsv_enc_defaults, > > -- > > 2.35.1.windows.2 > > Hi, > > thanks for submitting this patch. Though, I'm afraid, but this > > - fundamentally contradicts the logic of ffmpeg's handling of hw acceleration, > hw device and hw frames contexts > - adds code to an encoder, doing things an encoder is not supposed to do- qsv > encoders and decoders have their own context => QSV nvdec and nvenc have CUDA but nvenc can also support D3D11va, it sounds make sense for me to support D3D11va/vaapi in qsvenc too as d3d11va/vaapi are used internally in MediaSDK. > - is not safe/guaranteed to work always > there are different requirements for QSV than for other other cases > like VAAPI - for example: QSV requires a fixed-size frame pool > and encoders often need a larger frame pool than VAAPI > Encoders in MediaSDK don't need a fixed pool, probably we may relax this limitation in QSV. Thanks Haihao > > My personal opinion on such kind of automatic handling is this: > > when you are not able to build a command line in a way that you exactly > know at each stage of the transcoding pipeline in which hw (or sw) context > it will be executed, then you might be lost anyway - in most cases :-) > > When you really want to achieve that kind of behavior, then it would be > a better idea to create a mechanism for "auto-insertion" of hwmap > filters for such cases. > I don't think that such behavior should be active by default though, as > it would most likely create more non-understood failures than convenience > moments for not having to type ,hwmap=derive_device=qsv > _______________________________________________ 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".