From patchwork Thu Feb 17 09:13:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 34352 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp458874nkx; Thu, 17 Feb 2022 01:13:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJwckavgHg0PWkzihX0lnwKryup/zokKYJqlpunTRP/tpHreaI0xgZBF/jHLcsCsjpI2YKg8 X-Received: by 2002:a05:6402:d0d:b0:410:8411:216 with SMTP id eb13-20020a0564020d0d00b0041084110216mr1576970edb.316.1645089216825; Thu, 17 Feb 2022 01:13:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645089216; cv=none; d=google.com; s=arc-20160816; b=CTE2Yr9vlss1bZo2Bg1gHbfaZunjuXxsfcYYT9NOpc1VypaHYY0HgzHtYQTGsCbkRC ty2l1EFu8/zHyWcTLYYh9ZCKugX7Cv/IM/186U8auw/J+dskh2Tu7hvTyl1cVNv8H9BR i0+sxZtH0oAeX7DhNzcw5swHLoyyvIGjlbiZTCy8CX9omFba5dN3hmejdq1AqOLppKje MkW41h++DhPBRsmN/H5/dtHmezKL+N8vmxK5/NIUcH0ofg5+GTX665HVdm5t8SlImhjy PX/pB5HvkV2aTVZvIYZ18wAFHa/K6CYEBskIbYuOT6vRWJZw7/FCc1bfwt4JbHRyI2RY gJ2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=0fOiwui9W+VUwRSAF0dwvKE23TCfHRnzLN1rqjI7F5U=; b=z9x+AARCKYYhHxgIHRdHblhfNq/jADhy3OOBQ3XdJCxXYOtb3DOBd0tvqioCXHas64 6uQZgy2n0+L2J9iHNo+Nj99udii525l/42o99KolPkqEog9dDvk/fBXcOQRQ1UVKJNbx K6u+82H24iw4nm8gfVcyR+63GWX2k+pRGZvEIkpvv82IdYDM/ZvEQDD9rgwJ1e6c8aNk /f03l+RjcvBtp3sOoE3FAAIembJSt8Espu7cRnUbNs1lEwc6Ca7OMU/ILPqSRvr3MVb+ qCk7puwFSAwY6HmE03BVKiGpwtBR6ccaTzdNKzNxyQTKR8Cad02JAiQEOGjZNleoXa+d uR/g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dr8si1869378ejc.823.2022.02.17.01.13.35; Thu, 17 Feb 2022 01:13:36 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9814C68AF73; Thu, 17 Feb 2022 11:13:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ADDEE68B07E for ; Thu, 17 Feb 2022 11:13:23 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 25781240179 for ; Thu, 17 Feb 2022 10:13:23 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id OHPVgINyUw8E for ; Thu, 17 Feb 2022 10:13:21 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 793B8240175 for ; Thu, 17 Feb 2022 10:13:21 +0100 (CET) Received: by libav.khirnov.net (Postfix, from userid 1000) id 944393A0354; Thu, 17 Feb 2022 10:13:17 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Feb 2022 10:13:14 +0100 Message-Id: <20220217091315.21092-1-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] lavc/dxva2: rename drop AV prefix from AVDXVAContext 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: M55HS9PRDMKo It is not public. --- libavcodec/dxva2.c | 10 +++++----- libavcodec/dxva2_av1.c | 6 +++--- libavcodec/dxva2_h264.c | 14 +++++++------- libavcodec/dxva2_hevc.c | 8 ++++---- libavcodec/dxva2_internal.h | 10 +++++----- libavcodec/dxva2_mpeg2.c | 8 ++++---- libavcodec/dxva2_vc1.c | 6 +++--- libavcodec/dxva2_vp9.c | 6 +++--- 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c index 568d686f39..c31a71ba3b 100644 --- a/libavcodec/dxva2.c +++ b/libavcodec/dxva2.c @@ -562,7 +562,7 @@ static void ff_dxva2_lock(AVCodecContext *avctx) #if CONFIG_D3D11VA if (ff_dxva2_is_d3d11(avctx)) { FFDXVASharedContext *sctx = DXVA_SHARED_CONTEXT(avctx); - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); if (D3D11VA_CONTEXT(ctx)->context_mutex != INVALID_HANDLE_VALUE) WaitForSingleObjectEx(D3D11VA_CONTEXT(ctx)->context_mutex, INFINITE, FALSE); if (sctx->device_ctx) { @@ -578,7 +578,7 @@ static void ff_dxva2_unlock(AVCodecContext *avctx) #if CONFIG_D3D11VA if (ff_dxva2_is_d3d11(avctx)) { FFDXVASharedContext *sctx = DXVA_SHARED_CONTEXT(avctx); - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); if (D3D11VA_CONTEXT(ctx)->context_mutex != INVALID_HANDLE_VALUE) ReleaseMutex(D3D11VA_CONTEXT(ctx)->context_mutex); if (sctx->device_ctx) { @@ -768,7 +768,7 @@ static void *get_surface(const AVCodecContext *avctx, const AVFrame *frame) } unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, - const AVDXVAContext *ctx, + const DXVAContext *ctx, const AVFrame *frame) { void *surface = get_surface(avctx, frame); @@ -795,7 +795,7 @@ unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, } int ff_dxva2_commit_buffer(AVCodecContext *avctx, - AVDXVAContext *ctx, + DXVAContext *ctx, DECODER_BUFFER_DESC *dsc, unsigned type, const void *data, unsigned size, unsigned mb_count) @@ -890,7 +890,7 @@ int ff_dxva2_common_end_frame(AVCodecContext *avctx, AVFrame *frame, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *slice)) { - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); unsigned buffer_count = 0; #if CONFIG_D3D11VA D3D11_VIDEO_DECODER_BUFFER_DESC buffer11[4]; diff --git a/libavcodec/dxva2_av1.c b/libavcodec/dxva2_av1.c index 7b4483f855..66a4594550 100644 --- a/libavcodec/dxva2_av1.c +++ b/libavcodec/dxva2_av1.c @@ -53,7 +53,7 @@ static int get_bit_depth_from_seq(const AV1RawSequenceHeader *seq) return 8; } -static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const AV1DecContext *h, +static int fill_picture_parameters(const AVCodecContext *avctx, DXVAContext *ctx, const AV1DecContext *h, DXVA_PicParams_AV1 *pp) { int i,j, uses_lr; @@ -270,7 +270,7 @@ static int dxva2_av1_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const AV1DecContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct av1_dxva2_picture_context *ctx_pic = h->cur_frame.hwaccel_picture_private; if (!DXVA_CONTEXT_VALID(avctx, ctx)) @@ -346,7 +346,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *sc) { const AV1DecContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct av1_dxva2_picture_context *ctx_pic = h->cur_frame.hwaccel_picture_private; void *dxva_data_ptr; uint8_t *dxva_data; diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c index 5b23b28f12..489b9bb0f5 100644 --- a/libavcodec/dxva2_h264.c +++ b/libavcodec/dxva2_h264.c @@ -45,7 +45,7 @@ static void fill_picture_entry(DXVA_PicEntry_H264 *pic, pic->bPicEntry = index | (flag << 7); } -static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const H264Context *h, +static void fill_picture_parameters(const AVCodecContext *avctx, DXVAContext *ctx, const H264Context *h, DXVA_PicParams_H264 *pp) { const H264Picture *current_picture = h->cur_pic_ptr; @@ -161,7 +161,7 @@ static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext * //pp->SliceGroupMap[810]; /* XXX not implemented by FFmpeg */ } -static void fill_scaling_lists(const AVCodecContext *avctx, AVDXVAContext *ctx, const H264Context *h, DXVA_Qmatrix_H264 *qm) +static void fill_scaling_lists(const AVCodecContext *avctx, DXVAContext *ctx, const H264Context *h, DXVA_Qmatrix_H264 *qm) { const PPS *pps = h->ps.pps; unsigned i, j; @@ -187,7 +187,7 @@ static void fill_scaling_lists(const AVCodecContext *avctx, AVDXVAContext *ctx, } } -static int is_slice_short(const AVCodecContext *avctx, AVDXVAContext *ctx) +static int is_slice_short(const AVCodecContext *avctx, DXVAContext *ctx) { assert(DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) == 1 || DXVA_CONTEXT_CFG_BITSTREAM(avctx, ctx) == 2); @@ -218,7 +218,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, { const H264Context *h = avctx->priv_data; H264SliceContext *sl = &h->slice_ctx[0]; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); unsigned list; memset(slice, 0, sizeof(*slice)); @@ -300,7 +300,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, { const H264Context *h = avctx->priv_data; const unsigned mb_count = h->mb_width * h->mb_height; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); const H264Picture *current_picture = h->cur_pic_ptr; struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private; DXVA_Slice_H264_Short *slice = NULL; @@ -443,7 +443,7 @@ static int dxva2_h264_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const H264Context *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = h->cur_pic_ptr->hwaccel_picture_private; if (!DXVA_CONTEXT_VALID(avctx, ctx)) @@ -468,7 +468,7 @@ static int dxva2_h264_decode_slice(AVCodecContext *avctx, { const H264Context *h = avctx->priv_data; const H264SliceContext *sl = &h->slice_ctx[0]; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); const H264Picture *current_picture = h->cur_pic_ptr; struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private; unsigned position; diff --git a/libavcodec/dxva2_hevc.c b/libavcodec/dxva2_hevc.c index dbb701fb1c..ba8bbd28c7 100644 --- a/libavcodec/dxva2_hevc.c +++ b/libavcodec/dxva2_hevc.c @@ -54,7 +54,7 @@ static int get_refpic_index(const DXVA_PicParams_HEVC *pp, int surface_index) return 0xff; } -static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const HEVCContext *h, +static void fill_picture_parameters(const AVCodecContext *avctx, DXVAContext *ctx, const HEVCContext *h, DXVA_PicParams_HEVC *pp) { const HEVCFrame *current_picture = h->ref; @@ -197,7 +197,7 @@ static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext * pp->StatusReportFeedbackNumber = 1 + DXVA_CONTEXT_REPORT_ID(avctx, ctx)++; } -static void fill_scaling_lists(AVDXVAContext *ctx, const HEVCContext *h, DXVA_Qmatrix_HEVC *qm) +static void fill_scaling_lists(DXVAContext *ctx, const HEVCContext *h, DXVA_Qmatrix_HEVC *qm) { unsigned i, j, pos; const ScalingList *sl = h->ps.pps->scaling_list_data_present_flag ? @@ -239,7 +239,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *sc) { const HEVCContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); const HEVCFrame *current_picture = h->ref; struct hevc_dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private; DXVA_Slice_HEVC_Short *slice = NULL; @@ -358,7 +358,7 @@ static int dxva2_hevc_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const HEVCContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct hevc_dxva2_picture_context *ctx_pic = h->ref->hwaccel_picture_private; if (!DXVA_CONTEXT_VALID(avctx, ctx)) diff --git a/libavcodec/dxva2_internal.h b/libavcodec/dxva2_internal.h index b822af59cd..d14b696a3b 100644 --- a/libavcodec/dxva2_internal.h +++ b/libavcodec/dxva2_internal.h @@ -62,7 +62,7 @@ typedef union { #if CONFIG_DXVA2 struct dxva_context dxva2; #endif -} AVDXVAContext; +} DXVAContext; typedef struct FFDXVASharedContext { AVBufferRef *decoder_ref; @@ -91,12 +91,12 @@ typedef struct FFDXVASharedContext { // Legacy (but used by code outside of setup) // In generic mode, DXVA_CONTEXT() will return a pointer to this. - AVDXVAContext ctx; + DXVAContext ctx; } FFDXVASharedContext; #define DXVA_SHARED_CONTEXT(avctx) ((FFDXVASharedContext *)((avctx)->internal->hwaccel_priv_data)) -#define DXVA_CONTEXT(avctx) (AVDXVAContext *)((avctx)->hwaccel_context ? (avctx)->hwaccel_context : (&(DXVA_SHARED_CONTEXT(avctx)->ctx))) +#define DXVA_CONTEXT(avctx) (DXVAContext *)((avctx)->hwaccel_context ? (avctx)->hwaccel_context : (&(DXVA_SHARED_CONTEXT(avctx)->ctx))) #define D3D11VA_CONTEXT(ctx) (&ctx->d3d11va) #define DXVA2_CONTEXT(ctx) (&ctx->dxva2) @@ -136,10 +136,10 @@ typedef struct FFDXVASharedContext { #endif unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, - const AVDXVAContext *, + const DXVAContext *, const AVFrame *frame); -int ff_dxva2_commit_buffer(AVCodecContext *, AVDXVAContext *, +int ff_dxva2_commit_buffer(AVCodecContext *, DXVAContext *, DECODER_BUFFER_DESC *, unsigned type, const void *data, unsigned size, unsigned mb_count); diff --git a/libavcodec/dxva2_mpeg2.c b/libavcodec/dxva2_mpeg2.c index 136f5f9e06..d2935b3620 100644 --- a/libavcodec/dxva2_mpeg2.c +++ b/libavcodec/dxva2_mpeg2.c @@ -38,7 +38,7 @@ struct dxva2_picture_context { }; static void fill_picture_parameters(AVCodecContext *avctx, - AVDXVAContext *ctx, + DXVAContext *ctx, const struct MpegEncContext *s, DXVA_PictureParameters *pp) { @@ -104,7 +104,7 @@ static void fill_picture_parameters(AVCodecContext *avctx, } static void fill_quantization_matrices(AVCodecContext *avctx, - AVDXVAContext *ctx, + DXVAContext *ctx, const struct MpegEncContext *s, DXVA_QmatrixData *qm) { @@ -152,7 +152,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *sc) { const struct MpegEncContext *s = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; const int is_field = s->picture_structure != PICT_FRAME; @@ -255,7 +255,7 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const struct MpegEncContext *s = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; diff --git a/libavcodec/dxva2_vc1.c b/libavcodec/dxva2_vc1.c index 5fd6957d0c..5be6272855 100644 --- a/libavcodec/dxva2_vc1.c +++ b/libavcodec/dxva2_vc1.c @@ -38,7 +38,7 @@ struct dxva2_picture_context { }; static void fill_picture_parameters(AVCodecContext *avctx, - AVDXVAContext *ctx, const VC1Context *v, + DXVAContext *ctx, const VC1Context *v, DXVA_PictureParameters *pp) { const MpegEncContext *s = &v->s; @@ -185,7 +185,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *sc) { const VC1Context *v = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); const MpegEncContext *s = &v->s; struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; @@ -312,7 +312,7 @@ static int dxva2_vc1_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const VC1Context *v = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct dxva2_picture_context *ctx_pic = v->s.current_picture_ptr->hwaccel_picture_private; if (!DXVA_CONTEXT_VALID(avctx, ctx)) diff --git a/libavcodec/dxva2_vp9.c b/libavcodec/dxva2_vp9.c index eaeab3af7a..f7762b9e06 100644 --- a/libavcodec/dxva2_vp9.c +++ b/libavcodec/dxva2_vp9.c @@ -40,7 +40,7 @@ static void fill_picture_entry(DXVA_PicEntry_VPx *pic, pic->bPicEntry = index | (flag << 7); } -static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, const VP9SharedContext *h, +static int fill_picture_parameters(const AVCodecContext *avctx, DXVAContext *ctx, const VP9SharedContext *h, DXVA_PicParams_VP9 *pp) { int i; @@ -166,7 +166,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DECODER_BUFFER_DESC *sc) { const VP9SharedContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct vp9_dxva2_picture_context *ctx_pic = h->frames[CUR_FRAME].hwaccel_picture_private; void *dxva_data_ptr; uint8_t *dxva_data; @@ -254,7 +254,7 @@ static int dxva2_vp9_start_frame(AVCodecContext *avctx, av_unused uint32_t size) { const VP9SharedContext *h = avctx->priv_data; - AVDXVAContext *ctx = DXVA_CONTEXT(avctx); + DXVAContext *ctx = DXVA_CONTEXT(avctx); struct vp9_dxva2_picture_context *ctx_pic = h->frames[CUR_FRAME].hwaccel_picture_private; if (!DXVA_CONTEXT_VALID(avctx, ctx))