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 7D26342D87 for ; Wed, 8 Jun 2022 05:08:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B0C2568B546; Wed, 8 Jun 2022 08:08:20 +0300 (EEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10olkn2075.outbound.protection.outlook.com [40.92.41.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A2F7568B471 for ; Wed, 8 Jun 2022 08:08:14 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nQ76dy0MO5K2YdIXLnb9Bp5suWygj7iNU+0GeaCt+oQXbz/B7p3OkmIp6CkVHWiaAfpSYrwas/cOyq0fQxwiKnldPTJbrF2GD26VL27VR4gDZZfBp/m5YNkE/5mjrxukAFIJhfnu2ObHrkz95OOWtOj2RorirqKj7pl+pWq5fE/XeCrdKRK73wnvnoK07eB1HlfjRoUh0XhlJu8n1i0gM6VmfHwz4WQsO3GZsLs1XcXjiguyQaIvMkDhW6/YUMzjSo7g73BXips19raEyoWaKBDzRbE7JlHcu9h/yDyP8BeMPdH69G0q9nsd0FNjCcTnfhyjuosSrO4jhugEN2L1wA== 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=ZClbgYFzA+tKik4vIa+0OY4iI5XEGtbPlbyZxA68VIU=; b=PguiRtfe4lIFAnVBJZfUGpW9xYcf/Wv6BR6op7JtF69g1oH4Cjard/Q7GFpPhwumr2g7GzqHQbfkZI6X5WdsW4Qm7+ePfjVXdf/D1c3bCbzOT8kJg5SDw3J2Gb4eHt4oTprpVlY1TDCCbIJi1TIDzxFhCmmRrKv9KSaw3mghIwK5qWpltVrJ+APIe2flidfdpKdGWCbjhLVZoU7Ozdviv7hi9A0K4YkrhWSK8NDv/jP9st7lhCJs0yjmTLb802tUA8HKtb9hSRXK72LDdPGco4YqwgLY8bQrkNVLVO9tD1evPLFFp4D/GYI+WxuSc7nWpRZPYoFgJbTAunTYJYv4UQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZClbgYFzA+tKik4vIa+0OY4iI5XEGtbPlbyZxA68VIU=; b=kyn8NnEPc2a+B/1M3f3hrWUc9ZU30ZPWxatKu0Y+Wxc+yWsTXCkkbwqXgfiBRednjcm0zeUpN93xCHWrfexwG05g0eDtT0jZ6dNN6jngyiFsedsTGSEbae7ejlltCpfxevxehTN/URIY9R+0/g4YNb+s3szT7TV60SYnRXQjPKmmtBcQCggqAESFDJxzKoMQKUyBXF9nYh8AuStcqXKtAT/mVjPkeHDQw8fMsJXPQ9KGRxFt+b1zhxXPDsjFsgDbIL+oFUtrDEtJA3DK0siWX6AcXqU2tSJ1F3zqrA61z/B3rhj05JGh0hBL78iB5ka4xcU4MlhTwmrz3dB1pNLRKg== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by DS7P223MB0430.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:9e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.12; Wed, 8 Jun 2022 05:08:12 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a%7]) with mapi id 15.20.5314.019; Wed, 8 Jun 2022 05:08:11 +0000 From: Soft Works To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] avcodec/qsvenc: make QSV encoder encode VAAPI and D3D11 frames directly Thread-Index: AQHYelBN7yIjDSNIUki2xnbTqv8tca1E7eiQ Date: Wed, 8 Jun 2022 05:08:11 +0000 Message-ID: References: <20220607092216.405-1-tong1.wu@intel.com> In-Reply-To: <20220607092216.405-1-tong1.wu@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-tmn: [4vTsSmo6loB76xz8LcMExWL4zk3L6HVf] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 137b3708-6945-41c0-671f-08da490ce2a0 x-ms-traffictypediagnostic: DS7P223MB0430:EE_ x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vOOn54o3K8RidGIa/BqxEG5YSKrn1WTmm4C6Xmhs7ZIyB107BuU4b2kcDzckjVocT/JQkSbpiKLxE8178IrEzj5v6eeNwdqE6Po7Pn1jn5brMVp8vxP/V8EvBE8l41Mcq+8Oy48dcbgSKrYnQd6eT8OXOD1ohWkuEM8ZgG3B/3wZRM12HACQ7MUTVgHvBwLfWD6LEsQxJdpZAx2IyOF0GgfdHQDJ58iqI7wEklWc+gWJnT8P6ofJk3LlERn0+daF5LB8DGSamPWGV4PLdBDlzNguNgrwfMu/zZBchKbZN05NYuEmTnjMpDSklG7B+NfRzPl+B0Hy2bsm8ifPpDFGh653bHVYIx73134obp3RJ9xOG3qBADrv1opTiL9l7cT+c53uolPecw/rNHmUtHRjIxmLtp/6gxxSx4Jg7cl3fItq3NcP3Vzmf2/4Eo9zRf28d/J2MZ4k/BKg4Txgu0CMAZJx810yLXD34fQrN4vx3czejEcm0h000IYSDHUUa40tkBuMWwjT7yrOWKF9LgxEuW1jyyQJiO81AcDsnZ1AR5Fok/hFMwzXuSmAYNsGjpS8MyfGZqPGDKmEYtgHmXk/dQ== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WTdFZ2FacVFTU2wzbERpT0dvcDFyOHlvOS9KOFV1TWRpVDRLRExXNlc0SFpa?= =?utf-8?B?LzRmQ2ppMzRON2NwZ0NjdE9IZ2pwQ1BUVW5aUFZwZHdaNWFRUlZ5L1c2bElR?= =?utf-8?B?V3krejlzZ1k1dW9KSzkwaENxVVZtN2RRNnZTSFhWYXRPWUo3T3F2Wk9kTmhT?= =?utf-8?B?bElRNmloWFN2ZEVzaTM0bkpUWHJ6MlJhNng1TTUzSGYveEc2VHlKQ0VGbG15?= =?utf-8?B?a3N6NzIxc0w5b2d0NnhUQlR6TzJzOFcvS0NoNEN5RWhiQ05oc1dTN1hDU3cz?= =?utf-8?B?ZUJPYng1SThWNHg1YUdldEtGamF1aS8vcjBoMkJMeHU1eUZnL0pDY2poOUMr?= =?utf-8?B?OEN1TjVuT0ZUanNzQ0dzamR1eXRIRmtKdkdCbG4vYVErVHo4Vm1hUHRUMjZm?= =?utf-8?B?MCtiUzlkV0llOU1pSTI0YXNzU1NLQllvSWZ5clp4UTU3ME9iNGQ0emVWdzVu?= =?utf-8?B?NzRhVFJVbEV6ZGZNVUVvb3o2eWRUQ0g4SUJ5Y05RNXlJZEkycUxlcU1BMHJ6?= =?utf-8?B?NjdCOExXVU9yNGlxeEtpVGgzYlNwcUlUcFlkTFlkVGtMcnNpSWxjbnhrb25s?= =?utf-8?B?anV4Yi85NzFUMkUvMnhXQVo3akZqNHZHM0ZiZkhoUzZzZWJXdWhjNFNva01I?= =?utf-8?B?RWEwSVF5TFI3aDhZa2QwcVRjMExGd016dTlLekE4Q2p5czlnWFhudHdKcHJk?= =?utf-8?B?QUVmVnJRS3FkTkRqaGZhemJWenFFUWVJd2pKWU5GWlZVWjVza0FKTy9SR1Ev?= =?utf-8?B?dEZUQ0ZZOEFTeFJKdlZ2L242ZlhIT01EWDlmV0w1YzErRW0vVmZ1R3ZzQzdW?= =?utf-8?B?UC9QV01nUHZSQzY5L001OEg1YUFvdW40YnhsSUhwL25nZENLck1DNDRSakRY?= =?utf-8?B?NXpPWW40MzR5VWJKRHI5a2xZenZkQWhsenBKSUpvN0lrMmpoc1FqZXRrYTMr?= =?utf-8?B?T0x5V3JDblU4NENEUitPNEZrbm1qcC9lNnpyL3cxdHNMZG9pSzlaZ1RQOVdU?= =?utf-8?B?dm10dEZ0ZVlFZU9wSjRPL1dsREVSMUJTMnVRZXRKeHI3R0hMRCtRQ3Y3WFVH?= =?utf-8?B?aEZ1M29wU084Ykw2cmQ0bUlydjhtcmhhNDlBTCtTL3gya092LzloVWdUbUFN?= =?utf-8?B?Ri9OVVdjRDdoMHlDd05FSnJYOTlGMTBNN1NtSThjK3hGaFVybytYOWJsYlZP?= =?utf-8?B?cXpzSVRHZVViY001bnFvYWRaYTlUczRqZythdjFJdmxZVjh0K09BajRtK0x1?= =?utf-8?B?S3RUOW52aFI5NWx2eGdRMlBYK0NraExDbjhmNFFrZWYzSmtJSmQ0YjhQeGNn?= =?utf-8?B?OU1JMWFxS040RzRvTVdzN2xkUjZUbmc4cElqdHBRTEpwT1MxUFhubHU0a2U5?= =?utf-8?B?UjVML1U2QmpkWVl3YzJ3WnpGM053a0FhdmtqL3Z3czEwZUlFMTJhdUhvT2R3?= =?utf-8?B?WVR5Zm9KMW96cktXSElKbGs0RTc5UUtET0JlNGZ0NWRQeFZKOTlZQ1daZHRX?= =?utf-8?B?Und3UzhWclgydjM1YWk3dGlqSjVkMUNCOTBGellmRTdWZURvSE9OR0MvMWk4?= =?utf-8?B?SGo3VjJ3ZG1TZC9adjZ1eHJkRHJsNUFYbFpBN3RsUHg3dEF1Uk5OK1ZZWUN1?= =?utf-8?B?NlFuNVdLYnhHZS9mSGJnWENBVWtjdnFITnZHdU1nL0c1cnlRV3RoWlFNQXk4?= =?utf-8?B?blRFVURrbjJXd0VBWmtscE5EWUs2akdzZUlQMDQrV0VmSG5ZNHpEK0RsdG5h?= =?utf-8?B?Smw3disrT2F1YVBqUVRING53QlNCMWorTlpKUm1UenhwQjJXd2R1S24rcmNJ?= =?utf-8?B?OGtQczBrdVQ1WThRNjhxamJ5MWFoL05rd1MzWHdXNWVtR2ZmTy9HOVJ5ODh5?= =?utf-8?B?VHV1dmVxOUdkYXBVL0gxV1NIN0VmZ04yTjZtRitaMzFSb1E9PQ==?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-1ff67.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 137b3708-6945-41c0-671f-08da490ce2a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2022 05:08:11.6632 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7P223MB0430 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: Tong Wu , Wenbin Chen 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: > -----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 - 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 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 Best, softworkz _______________________________________________ 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".