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 1F94244BA7 for ; Mon, 7 Nov 2022 03:07:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3DBA168BA36; Mon, 7 Nov 2022 05:07:21 +0200 (EET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4645668B995 for ; Mon, 7 Nov 2022 05:07:19 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1667790440; x=1699326440; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=2SLm6SHTlSAMptJ7Gl8V3s2CdXGYdmMmSDC8iGgim/0=; b=Q7FF6hkTl58KCHoOjHW+XBrBKvRFSBYw71bxWoc1mvkr+BlL8kMyLiRF rKZB5L9UIGcVTuaC+n7y1r8CwTbjPx9qXTQyS3MkCZEaQ6R3prkGCFdEb d9KO5EU0PB4hn5YS2r5My1hZ+0luRH+Uzem/LcITl2YPqb7HOwnFRc547 ZJRUyZP0lF6w+xTDijNPou/uH5U9pQV/woicPzRRKafUsHSirqxK1zWId RJfmhElGNgh2YEUeFytAunNCml+tylgaJXkm2NFl3ny25s94Eb+C1xvUN rRbMUzs1xfZQ6yliez+mMHCVjFHBNmW7XPgVHK0Mj0t/bHf5DYKENiAL2 Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10523"; a="290701782" X-IronPort-AV: E=Sophos;i="5.96,143,1665471600"; d="scan'208";a="290701782" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Nov 2022 19:07:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10523"; a="668983249" X-IronPort-AV: E=Sophos;i="5.96,143,1665471600"; d="scan'208";a="668983249" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga001.jf.intel.com with ESMTP; 06 Nov 2022 19:07:17 -0800 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sun, 6 Nov 2022 19:07:17 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Sun, 6 Nov 2022 19:07:17 -0800 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.174) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Sun, 6 Nov 2022 19:07:16 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ip0XtKERGN8mFXvJwlWAzzSHczXnAA6i8y1FHOeDDIxsC8xIB7zIPTab9Scw7kQJjhaRDoGT8ryT36gSM2hQLMSd451ckxc+VLT+DW2/gDimcoQkh4i+MYtU36/AalymG7+1NFqowLfPb4oP4H2LUlblKvGmQfYWQ7hYrus9niC78cDdomqLLjHEpjYmN0+6J3E3WnC82apf1NxxaUDoB7r6gIUe9jXWs0g0DQDQEKDW1DehTBQG5UXcX7WL1uJ0e4DhEss0YBU2Q5DCZ5Z2n574iHvLj8b8/kZysnYSUF3qPdPvV1l7RW149bZJatrMWO34um+W9hMDIWnOftxaXQ== 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=2SLm6SHTlSAMptJ7Gl8V3s2CdXGYdmMmSDC8iGgim/0=; b=IAQJuHdwsYt3aEuWwb2r9zRQdi5raQGrheaE0v5lpMl0E40aVDCv1wIJ/sRTqfzeeeYAlLf3m7bpkw8obqbhbFg9WQ7hCbgB5uvUmbQ0M/l0ctnPDId6NG7wgiqzpCCPTKCMXX2pl9xHjvUOdBV2GWDd9eG7J6FHklmJoktAmVwsownJpeQ7JZ2FCR8TKL9V1OEer2W7kYx+G7jgpvMF/WqRp4qlN4pOpJ0q+l8VAgTbKASBMnTvOD2HGkvYaqXWa3U00ATc3Hs9K/WEXlKRolnESmWgTaIHbKa6wXftHLHZU2QAViLQgb3NjYSpYtx7oNGlrQ6oCPZrcS0K775i5w== 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 MW5PR11MB5857.namprd11.prod.outlook.com (2603:10b6:303:19d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.26; Mon, 7 Nov 2022 03:07:14 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::ca2a:c3a1:b0cb:c003]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::ca2a:c3a1:b0cb:c003%9]) with mapi id 15.20.5791.026; Mon, 7 Nov 2022 03:07:14 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Add skip_frame support to qsvenc Thread-Index: AQHY7pOSScxZ0/P8ikG+K0jydxX0DK4yzuoA Date: Mon, 7 Nov 2022 03:07:13 +0000 Message-ID: <7425cfc2217aaab459637f8c004b2b1b91dba460.camel@intel.com> References: <20221102081151.803641-1-wenbin.chen@intel.com> In-Reply-To: <20221102081151.803641-1-wenbin.chen@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_|MW5PR11MB5857:EE_ x-ms-office365-filtering-correlation-id: 06d8fc50-861f-4bd8-ba90-08dac06d2b82 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nKMdH9tcUOJQ02/WBg21U5Ye8sI4Nl5nTfRV0wDZEVGZyR+fOlwoJaO+Z63PVehXo32BZMIhAT6pP6BN8WECIe1X9v8zFn+FaCvMkKbyAk/014PEtzqXRJzbMvOVUZC4aiIyVh8/3Wgli++SHz361LUQjPnK9eDKY+8cEFCyP0wkiZwsMLMXhRLgvy4LIJlbvc7vY534rjowcalmLeNO9q/S0DIXp+s8CxDT62Ig83H+Odaja1+R2dXMKP+m7L3nCivrBgMlwwFDLdMaIw3jsbSGuXqAM3GBrzzHW+HjRLJvtxvrmIwxSF9Q1tHgHjbCB0OXf4C6FKaWTxDXEejzMIlCPd52DbzZiSK2JeyVNmqACnBjuaxRzGL4USYuLFhLsCfV1u/vovHpsOkxZCtmgucAQ5GPElZbVFzPbzVUD6Xx7Rv5Irnu5HOnqLnmg3t56cp0ZIsWW/1BX/1cc4N/hWI9lVabWi0QljY2sWmzfEyXgyU0uovB4VgMrkd6jdLawut7FhyHss2ZYSfc/PFJFtRoFsCcQgto7ZFDDvNeMm1Te0lYbYThn57y78TYyIk8KLPtoz43R+etYaAtiiHpQloGDYnyq1o6nuQSoo8vfoJfjzTtU6hK8XsrlGer6lr9RA6jJYD38QJnIqqhDhZfOnJaBf1qY1qDQ8SCsgj1+85NgrhspYzCjj3pMVFsh+aeEEEL02fj8UCwHVEFL5+xscfCI38cqWQNK+vZ+rltKjueAkNtc6G/VOaXFJbyHhpKl8ucYnPRgpDse7mf/8ShWcc66asUs0Hp/q+bC3IKrhB7Slf32TXAzs1PPSHss7V1 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)(396003)(39860400002)(376002)(136003)(346002)(366004)(451199015)(86362001)(36756003)(186003)(66946007)(76116006)(91956017)(316002)(6916009)(2616005)(66476007)(66446008)(41300700001)(83380400001)(64756008)(8676002)(71200400001)(26005)(6506007)(6512007)(478600001)(6486002)(38100700002)(122000001)(66556008)(38070700005)(82960400001)(5660300002)(8936002)(2906002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cG16WCtBYVlYNjhqZGl4bWIwSURKV203UVhJSUlPTmE0RGxXb0czZitpL2dM?= =?utf-8?B?UnpPZ21pY1A1Q0REZzg4Vkl6NGpLZkpaVGtETm9WUjlTeHUvNjk5SWNKRVo4?= =?utf-8?B?SWtNQjJMYUN3YnZlV2FxMWY3aEpwajZBV3AwWU0yQVJGR0FQcGh0Ly90amZL?= =?utf-8?B?YTg4bmxxOGtmUzhKQlVnMDFjM1A0UFVONzZ5M0I3dGRwaUdZZDlXVDIvNGZX?= =?utf-8?B?aTErbkt5bkVnUkdFdEdSMTkzZ2V5SDNtT1JBVEtreWtVdjM3Sm1GenlBaklp?= =?utf-8?B?NUFnYzZTY21ETkJ6eVlFblhkRXpPSmRROFViSHp3bktIcVZxYkF2RUV0WjJS?= =?utf-8?B?QVlHVkMvRGwyMU9JV1FZKzZZL0hBV1lGczhSTFZFYWtNcXhoeklmVVlTWjlS?= =?utf-8?B?ZGRLdUttUXRyMVlVY05ZUWdCS1puVUMxdS9rNDlOUGpLSEo1MWd2R3lhRDBN?= =?utf-8?B?MzFocmJUN0VOU0R0NVpIL00zQm5OMXRhb243L1N3UTlZNVNqTzB3Rm9Lc0Ns?= =?utf-8?B?VXQ5RlBNWTdYcVFGRHVseGpQMVpaalJOT1c2bHBRQVZXTWoxNkNzcG1CU3pF?= =?utf-8?B?a3RvalR1WUZYdk0yY0trdmlpUzdadEJabm9waVQyUXZMVzlrSE8rRGlNMkM3?= =?utf-8?B?a3NOUWM0MUxEV0RsRWc4SVBWV25DNWsxYlJaNnl6QU9JWXdNZEw5bHNQNUYr?= =?utf-8?B?aFg3elZJTkxJaTJKczQzMEdHYzIvanRmdnYwV3FiMS9mU2h3U1hUWTBZbUta?= =?utf-8?B?OEMyRXZ0eDczS29WZW9nTno1MDFkNG5pSTVwZnppcFZQMDZFSUJ0TXgwWGt5?= =?utf-8?B?eWVDczVOeXpsRDl6TEhFZGkvRnRJa1JIWlpEREhPblp6bjhWUXkrMHgrTUhk?= =?utf-8?B?a09rdGNnb0kxUFNBdytOUWRxTzdwaVIwc05DdnZGd2hxNDE4SHYrc3BGR2xr?= =?utf-8?B?NDh1NjBhelR5em5VUkMwQk1tUHdselpZaitWQ0NtNkpMM0pqd0poZExCUWNh?= =?utf-8?B?NE9zQmswbEJsTjZwNjcwTGZCSjNEWFpnakM3aTZ0d0hRSUo4M1hRbjFWSk52?= =?utf-8?B?MVZHeFV4dlVuMG5DeS9NaDB6Y2RzaHhEb2pTeG0zSGNWL094d21ldzhXTTYr?= =?utf-8?B?ZkdOUkVxSEVTcGVhSjV6QVhFUDZIUHpPRy90M1llZUhzcFcvNUxpeWJWVy9F?= =?utf-8?B?WStDaWdzT2RMdU1uNmNDN3l0Tm4xVHRkSkNMaVBFTWtnc250TzkxWDE4N2Zi?= =?utf-8?B?R0cyeER3aGV5OXRuRmxRelZHS3ZESWJic3hnN1JhcCtsWFM5Q0w3WExMRXJh?= =?utf-8?B?eEdLa2hWVHo5YUZVa215TnVNOFdCcjYxSGhQZDNRZEVrSXVOa3FFMDNFYnQ1?= =?utf-8?B?QU5Pelhzclh2NW1ReTExVmhyMFYvZU04WWltQ1lJTHVoZ3NEMURzNzZxYzNn?= =?utf-8?B?NXlqZ2ZqeWhSb2N6VGJvOEsyL2JOam1FYUxoajlsSHJhNjJTUDZFT09wbkNG?= =?utf-8?B?bFRnb2NjV2hwY1QzNUdQK21NY3ZPRFUyQXRpWlFWbW5aN25EaC9oQ1lRUnUv?= =?utf-8?B?UEV0bVJJMVhIdEJKN1JQZnlrMXRxV016R1I4MzNOakNLZndTSC9zUUZ2RlJy?= =?utf-8?B?aE5aaGhsMkFUclp4MEM0TlJtclFwbTI2RjFMcVlsRXdNV0FHKzA4OW16WUVB?= =?utf-8?B?cjdsbUdHSmQzZ0JPcGd2VFlpcnp1WTFmcmZDdnZMV2hmWmdldytMVFpRN0No?= =?utf-8?B?NEJxQVFEVUI2a3IyMTFZWGh4dlptTDhSclRaSGR5Z1JOVGpMNjFIMDQvMUhT?= =?utf-8?B?NmZRWlN1b21IMlpJYVo3OU4yMTN3Qkd4Nk9FZDZBT2FUVFcwNUlkdGtUbFJk?= =?utf-8?B?UlZTNFNhOXJXSXcwUy93aGdKc2lJaEFqSnVpR1dDZzlER2p3VFE4TUpwd05Q?= =?utf-8?B?bTR4Wm1Bd3pISHVmWEkxVjVHRUIyNWYza0ZFTmlZNm96OWRsc0kwbldlcFpr?= =?utf-8?B?Y3VYdkl4ZlNXRzRTWW5WcDFjT2FQSHptK1Arb0NtaWF5aXlZYnpybHhaZXpG?= =?utf-8?B?djVONzI5eHVOS1BDNjNZaWpjbVgveVgxWStyamlqRENpSHJlMGJmMmUraUxt?= =?utf-8?B?aytYRVpvem0vb3gvcnhMYUoxQkpJKytEcWVsN3lDbVN2bFBIVHQrMGlCd0Rl?= =?utf-8?B?WWc9PQ==?= 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: 06d8fc50-861f-4bd8-ba90-08dac06d2b82 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2022 03:07:13.9677 (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: FfJ9kOWFPUIczMEbdOMNW+x579kqjKJLR8ayP8igDtk14Xl1P33zvdxb1njBwO8oh49XpkU9FLTxeEV/afC4yw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5857 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Add skip_frame support to qsvenc 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 Wed, 2022-11-02 at 16:11 +0800, wenbin.chen-at-intel.com@ffmpeg.org wrote: > From: Wenbin Chen > > Add skip_frame support to qsvenc. Use per-frame metadata > "qsv_skip_frame" to control it. skip_frame option defines the behavior > of qsv_skip_frame. > no_skip: Frame skipping is disabled. > insert_dummy: Encoder inserts into bitstream frame where all macroblocks > are encoded as skipped. > insert_nothing: Similar to insert_dummy, but encoder inserts nothing. > The skipped frames are still used in brc. For example, gop still include > skipped frames, and the frames after skipped frames will be larger in > size. > brc_only: skip_frame metadata indicates the number of missed frames > before the current frame. > > Signed-off-by: Wenbin Chen > --- > doc/encoders.texi | 36 ++++++++++++++++++++++++++++++++++++ > libavcodec/qsvenc.c | 36 ++++++++++++++++++++++++++++++++++++ > libavcodec/qsvenc.h | 13 +++++++++++++ > libavcodec/qsvenc_h264.c | 1 + > libavcodec/qsvenc_hevc.c | 1 + > 5 files changed, 87 insertions(+) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 53dd02fd28..59f39d18f6 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3564,6 +3564,24 @@ bitrate, @var{target_bitrate}, within the accuracy > range @var{avbr_accuracy}, > after a @var{avbr_Convergence} period. This method does not follow HRD and > the > instant bitrate is not capped or padded. > > +@item @var{skip_frame} > +Use per-frame metadata "qsv_skip_frame" to skip frame when encoding. This > option > +defines the usage of this metadata. > +@table @samp > +@item no_skip > +Frame skipping is disabled. > +@item insert_dummy > +Encoder inserts into bitstream frame where all macroblocks are encoded as > +skipped. > +@item insert_nothing > +Similar to insert_dummy, but encoder inserts nothing into bitstream. The > skipped > +frames are still used in brc. For example, gop still include skipped frames, > and > +the frames after skipped frames will be larger in size. > +@item brc_only > +skip_frame metadata indicates the number of missed frames before the current > +frame. > +@end table > + > @end table > > @subsection HEVC Options > @@ -3742,6 +3760,24 @@ bitrate, @var{target_bitrate}, within the accuracy > range @var{avbr_accuracy}, > after a @var{avbr_Convergence} period. This method does not follow HRD and > the > instant bitrate is not capped or padded. > > +@item @var{skip_frame} > +Use per-frame metadata "qsv_skip_frame" to skip frame when encoding. This > option > +defines the usage of this metadata. > +@table @samp > +@item no_skip > +Frame skipping is disabled. > +@item insert_dummy > +Encoder inserts into bitstream frame where all macroblocks are encoded as > +skipped. > +@item insert_nothing > +Similar to insert_dummy, but encoder inserts nothing into bitstream. The > skipped > +frames are still used in brc. For example, gop still include skipped frames, > and > +the frames after skipped frames will be larger in size. > +@item brc_only > +skip_frame metadata indicates the number of missed frames before the current > +frame. > +@end table > + > @end table > > @subsection MPEG2 Options > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 0db774ea63..4bfa65c575 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -329,6 +329,22 @@ static void dump_video_param(AVCodecContext *avctx, > QSVEncContext *q, > "MinQPI: %"PRIu8"; MaxQPI: %"PRIu8"; MinQPP: %"PRIu8"; MaxQPP: > %"PRIu8"; MinQPB: %"PRIu8"; MaxQPB: %"PRIu8"\n", > co2->MinQPI, co2->MaxQPI, co2->MinQPP, co2->MaxQPP, co2- > >MinQPB, co2->MaxQPB); > av_log(avctx, AV_LOG_VERBOSE, "DisableDeblockingIdc: %"PRIu32" \n", > co2->DisableDeblockingIdc); > + > + switch (co2->SkipFrame) { > + case MFX_SKIPFRAME_NO_SKIP: > + av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: no_skip\n"); > + break; > + case MFX_SKIPFRAME_INSERT_DUMMY: > + av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: insert_dummy\n"); > + break; > + case MFX_SKIPFRAME_INSERT_NOTHING: > + av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: insert_nothing\n"); > + break; > + case MFX_SKIPFRAME_BRC_ONLY: > + av_log(avctx, AV_LOG_VERBOSE, "SkipFrame: brc_only\n"); > + break; > + default: break; > + } > } > > if (co3) { > @@ -991,6 +1007,8 @@ static int init_video_param(AVCodecContext *avctx, > QSVEncContext *q) > q->old_max_qp_b = q->max_qp_b; > if (q->mbbrc >= 0) > q->extco2.MBBRC = q->mbbrc ? MFX_CODINGOPTION_ON : > MFX_CODINGOPTION_OFF; > + if (q->skip_frame >= 0) > + q->extco2.SkipFrame = q->skip_frame; > > q->extco2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2; > q->extco2.Header.BufferSz = sizeof(q->extco2); > @@ -1911,6 +1929,19 @@ static int set_roi_encode_ctrl(AVCodecContext *avctx, > const AVFrame *frame, > return 0; > } > > +static void set_skip_frame_encode_ctrl(AVCodecContext *avctx, const AVFrame > *frame, > + mfxEncodeCtrl *enc_ctrl) > +{ > + AVDictionaryEntry* skip_frame_dict = NULL; > + if (!frame->metadata) > + return; > + skip_frame_dict = av_dict_get(frame->metadata, "qsv_skip_frame", NULL, > 0); > + if (!skip_frame_dict) > + return; > + enc_ctrl->SkipFrame = strtol(skip_frame_dict->value, NULL, 10); > + return; > +} > + > static int update_qp(AVCodecContext *avctx, QSVEncContext *q) > { > int updated = 0, new_qp = 0; > @@ -2282,6 +2313,11 @@ static int encode_frame(AVCodecContext *avctx, > QSVEncContext *q, > if (ret < 0) > goto free; > } > + if ((avctx->codec_id == AV_CODEC_ID_H264 || > + avctx->codec_id == AV_CODEC_ID_H265) && > + q->skip_frame != MFX_SKIPFRAME_NO_SKIP && > + enc_ctrl && QSV_RUNTIME_VERSION_ATLEAST(q->ver, 1, 13)) > + set_skip_frame_encode_ctrl(avctx, frame, enc_ctrl); > > pkt.sync = av_mallocz(sizeof(*pkt.sync)); > if (!pkt.sync) > diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h > index eb79db9871..d46575ef78 100644 > --- a/libavcodec/qsvenc.h > +++ b/libavcodec/qsvenc.h > @@ -127,6 +127,18 @@ > { "avbr_accuracy", "Accuracy of the AVBR ratecontrol (unit of tenth of > percent)", OFFSET(qsv.avbr_accuracy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, > UINT16_MAX, VE }, \ > { "avbr_convergence", "Convergence of the AVBR ratecontrol (unit of 100 > frames)", OFFSET(qsv.avbr_convergence), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, > UINT16_MAX, VE }, > > +#define QSV_OPTION_SKIP_FRAME \ > +{ "skip_frame", "Allow frame skipping", > OFFSET(qsv.skip_frame), AV_OPT_TYPE_INT, { .i64 = MFX_SKIPFRAME_NO_SKIP }, \ > + MFX_SKIPFRAME_NO_SKIP, MFX_SKIPFRAME_BRC_ONLY, VE, "skip_frame" }, \ > +{ "no_skip", "Frame skipping is disabled", \ > + 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_NO_SKIP }, .flags > = VE, "skip_frame" }, \ > +{ "insert_dummy", "Encoder inserts into bitstream frame where all > macroblocks are encoded as skipped", \ > + 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_DUMMY }, .flags > = VE, "skip_frame" }, \ > +{ "insert_nothing", "Encoder inserts nothing into > bitstream", \ > + 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_NOTHING }, .flags > = VE, "skip_frame" }, \ > +{ "brc_only", "skip_frame metadata indicates the number of missed > frames before the current frame", \ > + 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_BRC_ONLY }, .flags > = VE, "skip_frame" }, > + > extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[]; > > typedef int SetEncodeCtrlCB (AVCodecContext *avctx, > @@ -285,6 +297,7 @@ typedef struct QSVEncContext { > int old_rc_max_rate; > // This is used for SEI Timing reset > int old_pic_timing_sei; > + int skip_frame; > } QSVEncContext; > > int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c > index 11aaabbd1b..0ff7356346 100644 > --- a/libavcodec/qsvenc_h264.c > +++ b/libavcodec/qsvenc_h264.c > @@ -116,6 +116,7 @@ static const AVOption options[] = { > QSV_OPTION_MAX_MIN_QP > QSV_OPTION_SCENARIO > QSV_OPTION_AVBR > + QSV_OPTION_SKIP_FRAME > > { "cavlc", "Enable > CAVLC", OFFSET(qsv.cavlc), AV_OPT_TYPE_BOOL > , { .i64 = 0 }, 0, 1, VE }, > #if QSV_HAVE_VCM > diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c > index 28d2cfcae1..95cf417f67 100644 > --- a/libavcodec/qsvenc_hevc.c > +++ b/libavcodec/qsvenc_hevc.c > @@ -317,6 +317,7 @@ static const AVOption options[] = { > QSV_OPTION_ADAPTIVE_B > QSV_OPTION_SCENARIO > QSV_OPTION_AVBR > + QSV_OPTION_SKIP_FRAME > > { "idr_interval", "Distance (in I-frames) between IDR frames", > OFFSET(qsv.idr_interval), AV_OPT_TYPE_INT, { .i64 = 0 }, -1, INT_MAX, VE, > "idr_interval" }, > { "begin_only", "Output an IDR-frame only at the beginning of the > stream", 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, VE, "idr_interval" }, Applied, thx -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".