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 E28964A422 for ; Thu, 28 Mar 2024 02:04:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B3A3C68D6C1; Thu, 28 Mar 2024 04:04:46 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2062.outbound.protection.outlook.com [40.92.89.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0B27668D0BD for ; Thu, 28 Mar 2024 04:04:40 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A75MTqWNJQvF4RCPDwBNaqUdDp7IkODhkDO5w+BTuJIy+No/8HdKEgK+3treig8oXmMOXcDRhlV0y0ZW+aRe5dtoIYA8CVinzaWoPRwbriOv9hbsoB0N8f+XUt9L3wy32OjJAqBn3qbPEIwEUMPZL9gq1TzDO3c/+9fhr77trhrZ52nz2G1LCGSwvxvuPFScxkidnQy05MUZDAkM2kIxNWRfvPJtW913yaTFJBwcbIZ5Zi3qAvZAqqgQrJpDnNNOqZzE05lwxBINvg4mmCbbXVVQEyscb3lSicBK4O2vas3ofeL4EMxr9YkYGx4MgAOSTFPQkSWis4PNf5zeZKiiJQ== 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=KP57ofhNoe7IUUsANXUMsb9+22VljnyLwxJrOTSzrbQ=; b=Y/5Y8YETOjiHB7Oiqe0EiP8UIAjtVLjeI33TA0ZRgaTPrN3ei+3CvhenpTiUGFmXlcKb1JZ3sJvk1KvnC47IZE7VNArd5neCz8uqUbE7mm3DrRf6xYIYRrsN91IBoTx5BIqGhDxNw6HJunLNq0Dieed2VEiTYq6MYaXNNFT/M+Xs+BsBsIwLNGQGvfKSxysAAsSeuDnl1bCLL4To95s/zdN8CodqeBCwcZnvJGLDMe1Keyjn0Dy8xbq9JGTdbWihd2MFzBSZNKiMzEQrukxO3Tw2zq/Z/LMXhqgQlKD/RjDxA9LUc0VppMJBaOQumUnwdFsp1DVv03RReUZmsP+dmA== 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=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KP57ofhNoe7IUUsANXUMsb9+22VljnyLwxJrOTSzrbQ=; b=JhpHhYgBozQNLTn/Pu4mQ/gtT0+DdTdFTA+7dS/CHJwv0h5s5wk9sPhkHxXUB79NjHsBtJf0enr09qTJR9JmbAdR1cJc/OtOFS88jUxvVSkaBt6SLFxbGR+37YB0lsER/H1ow248px3zsUFqPaVOILMyt/8boJWS5RN/xxMpq3bnVwLgejZ0Sfg7erLaIRKkUOFRJLYDHEvhlWITmqGzrH4pWf8rHhz7I1GzyeXUZS5g8nt0/IezqzQyVSiqx3FBoQdu5hbshLmkSE/Zen4hBJrB07jb6d70ulL0pQljciqtfrZiQLvjijBrhhOiNgtEa1VBMaK+NMj9f9VbUr1iVA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DB9P250MB0546.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:338::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.31; Thu, 28 Mar 2024 02:04:38 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.028; Thu, 28 Mar 2024 02:04:38 +0000 Message-ID: Date: Thu, 28 Mar 2024 03:04:35 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240328012631.777476-1-fei.w.wang@intel.com> <20240328012631.777476-6-fei.w.wang@intel.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240328012631.777476-6-fei.w.wang@intel.com> X-TMN: [MAuu4xDAGvPcAskX1fmLuIUb8EH3iKmVsKztBmQscLQ=] X-ClientProxiedBy: FR0P281CA0241.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:af::19) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DB9P250MB0546:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e222835-a93b-49b7-7887-08dc4ecb6c5a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YyR8E3EVxEF2RZb1TsPu5oYtHxIT76YPHhmZlfuJECTneazkijVfZUL6WyFxl/PAbVN7F7snouI6+9W4BfwHaZiuXL+pi1HKiddIYTnWp1Tb+upsZ/i36JPnLPIVr476tjU5vl0mQysYnqx8qcGF3bQZLGCHr45i7DlgS+kaWn2deSmoE6EL495apUoSUsSXHnw4+xl+Oa/DE+lGAkk7S7mCMnANWAca8env2VdQySKNe4dNI5D7YxzVJCdgXTKBky72qKo5N5ovdWhkna4o2kzhj/j7OVVhQlg+/sqTTMNwNmFHbi4KqU852RnslniqFgD+b4TGKf9UqvOmZtmT09uM4fqAGXnkgSXOUPELp5hpTPB1POstgIYXtQdNK8tLqxQc5cbCFxJ8Fr4OD9wkgvkeqbFGaAcGxelpQ4OWMXVoPFzIryFqIj9Tjl/SIe5WAHcEIa0n8VUB61cK6/YmwZWYYvrelE8vDy5PDaF4svgwols+RCcgefoa42nl6IajOkdxptdnTC7OflUeK5xj1AK/vbQd7045eKzVexm6t9Tu0NxEfvp9yh7ZftP+Hw8I X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amxYQzlubVJJTVJKWEtKVTE5ZGNTeWdLcnQxMnU0WCtMZU1wWUlwZGtnV29Y?= =?utf-8?B?RE13a1cxVHlDU3duZTUrWW5SZ0E5NGpxNXZGUWEzYWNNY0RGaVZJMFRpQjVQ?= =?utf-8?B?ekR4clRqTStwSmZGdTZjZzVuaTVGZ2QyQjgza2VKbCtERVQ1RDJFM0hkc2ha?= =?utf-8?B?czlLWTZXVTRrTXNTbkF0amlxNko0Z0N3Ykd0b3VqNUE4ZWwzYkp0VUNFZitY?= =?utf-8?B?WnRVdTZVU2dCR2ltcDJkNTIySUhRRVJPNzE4bWZueE9mTkVlMGRoc2ZGNkMr?= =?utf-8?B?Z0kzSnRGYnFzSTVjS1g0RFVhR1Nkd25CYjJwWmxaZWo4Q0NzYzAwNEovRGly?= =?utf-8?B?cnNnRlk5SFlDQUIrT20vZENwcVJZa2JWdWdQR1FIZy9NbTUwVng5Smdrb0w5?= =?utf-8?B?bWp5MVRCWXd1V0xXQjhLOGpQeW5uY3hUckJobzFmektneGlLNlNTR3dNbVIz?= =?utf-8?B?cVpXOEliN2NKcXJXcDNVa3lmZDBHQ2tnTnpQdXBYMUxqZWdQNGIwUStvdGxz?= =?utf-8?B?T2FrenVvbndoUGJsRElIVWNwWDVUVFpCNzUrSThwM3VZQjJyTGFZaWVkRzl5?= =?utf-8?B?R2g4Rmw5YjFyaCtCUEpPbWx6Vkl2ZUdvOVpzcDJRRng1dUYyRk5sYk5DcnBm?= =?utf-8?B?RUVCcTF0d1MyeVVsMUJBdlVCeTEwemgvU01rblV1RjZqVTBCTy8yU2FibHFK?= =?utf-8?B?ODZzM3hRWGs3Y2J0eWpUcFExbXh0M0VnYkFaMElJUXorbzhuOVJ1NzdXRTVj?= =?utf-8?B?OGNDQ3lGUXhYczh3ZU5oS1Y1NXpxUTR5Y2JyVFZQeFRwVVFUaUdyaENieXhq?= =?utf-8?B?bWNid3dWM1Fmd1orNmVuL1BSdWRoNE5uRzl4VlFmeHNyakxiRTVrOGVoNmVv?= =?utf-8?B?TWp6SXM3dHdBV1ZzOEljNlo0U0QyREFQZjA3Y2Nld2k2eGN5K2duUDZmUlRX?= =?utf-8?B?d21ENyt3WFJ1a1ZtYlVWR2xhZk5BcmFkZ3llajJqSnRZbHF5QThsN1RlWHl4?= =?utf-8?B?bFkzV29ZemRLOEVHWlJETmhWUFpuWFM2N2VGVVVhbjJOTk1yeVRnbGt5Yjg0?= =?utf-8?B?aE9DNlFFLzVHTlVWVytCRUQ1eW53MUcyRUZrc2VSd013STJMMVFMRkVDODlq?= =?utf-8?B?OXpnVkhXTklSUmVIMHI1MkYwU0V2bzBwUzVYZVpQVFA4RjVEZVpiWURyZ0NG?= =?utf-8?B?U2tSK1pZdEZTYU50RlRuQUs2MkJOcE5Pb2c4ZmtqaVcrODlsMThaTktNa0xW?= =?utf-8?B?eXZHbmNmSUQwZjY1c003NFhzNGhaTkYwdWVpbDNyMCtMcHVvQkFaYXk5WnlQ?= =?utf-8?B?dFVkTm1QRm8veWd6NFhjUU9za0xWSU0zOGNGbmh3dE9rRFRacldoTGZCY2pv?= =?utf-8?B?eE1kZzFwdFpXZjNocEp6Um42T3dpUkQxTlRvYzRhWXpCYXJ2ZzdTa083RFAv?= =?utf-8?B?Y2R6bjYxWURuODg5ZXhyZ3c3bDhsSEptZG1hYnBFUkFGTThaZ1F5d2xBbEE1?= =?utf-8?B?b1lZaGo0OTgrVDFnbUhjV1lFZ1BKQ2praGRoWUJQSEREMTBLOWc0WHp0RUxr?= =?utf-8?B?RSt0RjVWaXdVTlpKbVJCM2U5NEZlQXFaWVBtNFQyRnZRZ2c3Ri9uNnl6TWtI?= =?utf-8?B?aStMVHNQKzRkcFpHYXVURFlmbE5XL21rVnVoZU1sSC9IY0k2bUY2bXo1ZytV?= =?utf-8?B?dFpqMURJeHZLRTRmcTBXSng5OGxTUXBjbndJR1VWVkZrMEVzOUZ5MFNRPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e222835-a93b-49b7-7887-08dc4ecb6c5a X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 02:04:38.5429 (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: DB9P250MB0546 Subject: Re: [FFmpeg-devel] [PATCH v1 6/7] lavc/vvc_dec: Add hardware decode API 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: fei.w.wang-at-intel.com@ffmpeg.org: > From: Fei Wang > > Signed-off-by: Fei Wang > --- > libavcodec/vvc/vvc_refs.c | 6 ++++ > libavcodec/vvc/vvcdec.c | 67 +++++++++++++++++++++++++++++++++++---- > libavcodec/vvc/vvcdec.h | 5 +++ > 3 files changed, 72 insertions(+), 6 deletions(-) > > diff --git a/libavcodec/vvc/vvc_refs.c b/libavcodec/vvc/vvc_refs.c > index bf70777550..c9f89a5a0a 100644 > --- a/libavcodec/vvc/vvc_refs.c > +++ b/libavcodec/vvc/vvc_refs.c > @@ -25,6 +25,7 @@ > #include "libavutil/thread.h" > #include "libavcodec/refstruct.h" > #include "libavcodec/thread.h" > +#include "libavcodec/decode.h" > > #include "vvc_refs.h" > > @@ -56,6 +57,7 @@ void ff_vvc_unref_frame(VVCFrameContext *fc, VVCFrame *frame, int flags) > ff_refstruct_unref(&frame->rpl_tab); > > frame->collocated_ref = NULL; > + ff_refstruct_unref(&frame->hwaccel_picture_private); > } > } > > @@ -138,6 +140,10 @@ static VVCFrame *alloc_frame(VVCContext *s, VVCFrameContext *fc) > if (!frame->progress) > goto fail; > > + ret = ff_hwaccel_frame_priv_alloc(s->avctx, &frame->hwaccel_picture_private); > + if (ret < 0) > + goto fail; > + > return frame; > fail: > ff_vvc_unref_frame(fc, frame, ~0); > diff --git a/libavcodec/vvc/vvcdec.c b/libavcodec/vvc/vvcdec.c > index d5704aca25..f2e269ce76 100644 > --- a/libavcodec/vvc/vvcdec.c > +++ b/libavcodec/vvc/vvcdec.c > @@ -24,6 +24,8 @@ > #include "libavcodec/decode.h" > #include "libavcodec/profiles.h" > #include "libavcodec/refstruct.h" > +#include "libavcodec/hwconfig.h" > +#include "libavcodec/hwaccel_internal.h" > #include "libavutil/cpu.h" > #include "libavutil/thread.h" > > @@ -563,6 +565,8 @@ static int ref_frame(VVCFrame *dst, const VVCFrame *src) > > ff_refstruct_replace(&dst->rpl_tab, src->rpl_tab); > ff_refstruct_replace(&dst->rpl, src->rpl); > + ff_refstruct_replace(&dst->hwaccel_picture_private, > + src->hwaccel_picture_private); > dst->nb_rpl_elems = src->nb_rpl_elems; > > dst->poc = src->poc; > @@ -718,17 +722,41 @@ static int slice_start(SliceContext *sc, VVCContext *s, VVCFrameContext *fc, > return 0; > } > > +static enum AVPixelFormat get_format(AVCodecContext *avctx, const VVCSPS *sps) > +{ > +#define HWACCEL_MAX 0 > + > + enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts; > + > + switch (sps->pix_fmt) { > + case AV_PIX_FMT_YUV420P: > + break; > + case AV_PIX_FMT_YUV420P10: > + break; > + } > + > + *fmt++ = sps->pix_fmt; > + *fmt = AV_PIX_FMT_NONE; > + > + return ff_get_format(avctx, pix_fmts); > +} > + > static void export_frame_params(VVCContext *s, const VVCFrameContext *fc) > { > AVCodecContext *c = s->avctx; > const VVCSPS *sps = fc->ps.sps; > const VVCPPS *pps = fc->ps.pps; > > - c->pix_fmt = sps->pix_fmt; > - c->coded_width = pps->width; > - c->coded_height = pps->height; > - c->width = pps->width - ((pps->r->pps_conf_win_left_offset + pps->r->pps_conf_win_right_offset) << sps->hshift[CHROMA]); > - c->height = pps->height - ((pps->r->pps_conf_win_top_offset + pps->r->pps_conf_win_bottom_offset) << sps->vshift[CHROMA]); > + // Reset HW config if pix_fmt/w/h change. > + if (s->pix_fmt != sps->pix_fmt || c->coded_width != pps->width || c->coded_height != pps->height) { > + c->coded_width = pps->width; > + c->coded_height = pps->height; > + c->pix_fmt = get_format(c, sps); > + s->pix_fmt = sps->pix_fmt; > + } > + > + c->width = pps->width - ((pps->r->pps_conf_win_left_offset + pps->r->pps_conf_win_right_offset) << sps->hshift[CHROMA]); > + c->height = pps->height - ((pps->r->pps_conf_win_top_offset + pps->r->pps_conf_win_bottom_offset) << sps->vshift[CHROMA]); > } > > static int frame_setup(VVCFrameContext *fc, VVCContext *s) > @@ -771,6 +799,20 @@ static int decode_slice(VVCContext *s, VVCFrameContext *fc, const H2645NAL *nal, > ret = slice_init_entry_points(sc, fc, nal, unit); > if (ret < 0) > return ret; > + > + if (s->avctx->hwaccel) { > + if (is_first_slice) { > + ret = FF_HW_CALL(s->avctx, start_frame, NULL, 0); > + if (ret < 0) > + return ret; > + } > + > + ret = FF_HW_CALL(s->avctx, decode_slice, > + nal->raw_data, nal->raw_size); > + if (ret < 0) > + return ret; > + } > + > fc->nb_slices++; > > return 0; > @@ -885,9 +927,20 @@ static int wait_delayed_frame(VVCContext *s, AVFrame *output, int *got_output) > static int submit_frame(VVCContext *s, VVCFrameContext *fc, AVFrame *output, int *got_output) > { > int ret; > + > + if (s->avctx->hwaccel) { > + if (ret = FF_HW_SIMPLE_CALL(s->avctx, end_frame) < 0) { > + av_log(s->avctx, AV_LOG_ERROR, > + "Hardware accelerator failed to decode picture\n"); > + ff_vvc_unref_frame(fc, fc->ref, ~0); > + return ret; > + } > + } else > + ff_vvc_frame_submit(s, fc); > + > s->nb_frames++; > s->nb_delayed++; > - ff_vvc_frame_submit(s, fc); > + > if (s->nb_delayed >= s->nb_fcs) { > if ((ret = wait_delayed_frame(s, output, got_output)) < 0) > return ret; > @@ -1027,6 +1080,8 @@ static av_cold int vvc_decode_init(AVCodecContext *avctx) > GDR_SET_RECOVERED(s); > ff_thread_once(&init_static_once, init_default_scale_m); > > + s->pix_fmt = AV_PIX_FMT_NONE; > + > return 0; > } > > diff --git a/libavcodec/vvc/vvcdec.h b/libavcodec/vvc/vvcdec.h > index aa3d715524..009d57424e 100644 > --- a/libavcodec/vvc/vvcdec.h > +++ b/libavcodec/vvc/vvcdec.h > @@ -78,6 +78,9 @@ typedef struct VVCFrame { > * A combination of VVC_FRAME_FLAG_* > */ > uint8_t flags; > + > + AVBufferRef *hwaccel_priv_buf; Seems unused (hwaccel_picture_private uses RefStruct nowadays; no other decoder uses the AVBuffer API for this any more). > + void *hwaccel_picture_private; ///< hardware accelerator private data > } VVCFrame; > > typedef struct SliceContext { > @@ -224,6 +227,8 @@ typedef struct VVCContext { > > uint64_t nb_frames; ///< processed frames > int nb_delayed; ///< delayed frames > + > + enum AVPixelFormat pix_fmt; ///< pix format of current frame > } VVCContext ; > > #endif /* AVCODEC_VVC_VVCDEC_H */ _______________________________________________ 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".