From patchwork Tue May 28 15:48:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wu, Tong1" X-Patchwork-Id: 49329 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:8f0d:0:b0:460:55fa:d5ed with SMTP id i13csp55348vqu; Tue, 28 May 2024 08:52:53 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV+rn21CInUd1JTKx3xS1hQL1MUIK+8IqU9/4R+y66jmd5lTKnRCbAbh41Bolg7Jyr9H8Y3cddt835w829cLwzn9iBAbVHIVAmHig== X-Google-Smtp-Source: AGHT+IFeR9G1HU3uTXB54aTp8/Eg+oLadkfz67NW8zniTLpFC+EUnGIyV/hTcNxpcDitDJuVVXKl X-Received: by 2002:a17:906:b0c5:b0:a59:b490:e77b with SMTP id a640c23a62f3a-a62646d6a39mr848122566b.40.1716911573380; Tue, 28 May 2024 08:52:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716911573; cv=none; d=google.com; s=arc-20160816; b=GkrDLwNfUgq/XAlpo37+LiI2UwdkHhkso2Tmzm1lTPKzdd3bt3VKEZG7bV3n6alA4V b6rE8nTbAhB9ZkjJ0Snr10+n63iKRKQXZIUCHM9+lQLE2pr6a1QKKIphHIZ7KTlNGksV XDZCIT/jykUpTVWFWUok73GSuwSY01mNpuJ6tMkOPaZBSnPyYvOOdIdWtd8cwyZegTnb iTUOz4SSDdDu6MEggw7fLzZk2ZlJhP82pUDEvK9XoXrg3KZX2LpB8XItFZjAqHpW8f+5 AdlxlHK9b/KBA9Ugj1sgEklqO9hkNg4hYthOfLFFVfXgQ2rOU+OrEQAJBjHDiyl1xd23 6gBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=RC7+7LDsznffsHZ6ZcZEzUTUpKUHIawtTstDyAxJvPI=; fh=CX/m9qTuMDwrotqtm4RkAOJT6yXlKL2vcfWDitFPXZs=; b=ari+nHeGdJJ1/ebWS9koHYRS2V9MY3Vi095FbHpRUhxuh3bt3obtlMHpNw8HeDQgzm ic84Fxx414yizos2KGDh/lKX9fTrHljtsKvdpVge1tjSCHCWRyzG42U6xqJ8nIDMVRkO 5C7POCLPtUXGBj02zrGPpFYTin3WLYUg/Vo4OlDQ7euQinPr1xt1bp6QU4M2DGbGTIzo adFo84AOCsRmT0gi67yaqgTmr2pNC0LRaqxkv5cAOPHAcmYogzBWr1eI0+yjSdncb8Zk 1W6UQs1f8SJpKp0ON56KaHarFAFh5de4xnnvzOilsJqNF0FFE7odSzSM90RKvSz2yhvb M7eQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=e2a78w+W; 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 a640c23a62f3a-a630d03b27dsi196241266b.380.2024.05.28.08.52.37; Tue, 28 May 2024 08:52:53 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=e2a78w+W; 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 CFE9768D5C2; Tue, 28 May 2024 18:50:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4371868D565 for ; Tue, 28 May 2024 18:50:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1716911408; x=1748447408; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ib3rcgCEEAUme//lwGB16CAjVdkUKLVS0rAkZR7dmNc=; b=e2a78w+WPJ4mgA0zm5NRKPfmkXCJxqZgBWdj3uU9z2GB/X7NkD8OKDMM /XfID4L+e415nC7ajClk699C/8j5talBIeURXoiXF3L4z/bJR5UEJD+6T mqxiXMLKb+sFYC6eNcEgvJ1j41WuvP4GFa1Hn3ryFcXzH5VBgNJtskvma Wbi3FgKJeFoBDd2XTTibxI/KaEoYWMuAQylBbUrulArIZokZvyXIesXZ1 P3L0s/ypqX/RQOWpntoeUrmXPbxRkyK1GYdQPqz7eNvTXImcHNJ3+COHC 1kN7a8qM5/ZlkfA/j4KyGBBf23BatcQwmFrnKgTheEBxe0P598CTrilsP Q==; X-CSE-ConnectionGUID: eLTewQgaRSGxn/Ibjm9/dg== X-CSE-MsgGUID: eoel3Q7bQoS+9TyLkrDE0g== X-IronPort-AV: E=McAfee;i="6600,9927,11085"; a="23821950" X-IronPort-AV: E=Sophos;i="6.08,195,1712646000"; d="scan'208";a="23821950" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2024 08:50:06 -0700 X-CSE-ConnectionGUID: KJARbb28SZiT+vbZaXtAPg== X-CSE-MsgGUID: 6PO7KWx0QIC9+2dP/xxr4w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,195,1712646000"; d="scan'208";a="35731313" Received: from unknown (HELO localhost.localdomain) ([10.239.160.66]) by orviesa007.jf.intel.com with ESMTP; 28 May 2024 08:50:05 -0700 From: tong1.wu-at-intel.com@ffmpeg.org To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 May 2024 23:48:06 +0800 Message-ID: <20240528154807.1151-15-tong1.wu@intel.com> X-Mailer: git-send-email 2.41.0.windows.1 In-Reply-To: <20240528154807.1151-1-tong1.wu@intel.com> References: <20240528154807.1151-1-tong1.wu@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 15/15] avcodec/hw_base_encode: add avctx pointer for FFHWBaseEncodeContext 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DqcCVLuRFxuU From: Tong Wu An avctx pointer is added to FFHWBaseEncodeContext. This is to make FFHWBaseEncodeContext a standalone component for ff_hw_base_* functions. This patch also removes some unnecessary AVCodecContext arguments. Signed-off-by: Tong Wu --- libavcodec/d3d12va_encode.c | 6 +++--- libavcodec/hw_base_encode.c | 31 +++++++++++++------------------ libavcodec/hw_base_encode.h | 8 +++++--- libavcodec/vaapi_encode.c | 6 +++--- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/libavcodec/d3d12va_encode.c b/libavcodec/d3d12va_encode.c index 0fbf8eb07c..6d3a53c6ca 100644 --- a/libavcodec/d3d12va_encode.c +++ b/libavcodec/d3d12va_encode.c @@ -1351,7 +1351,7 @@ static int d3d12va_encode_create_recon_frames(AVCodecContext *avctx) enum AVPixelFormat recon_format; int err; - err = ff_hw_base_get_recon_format(avctx, NULL, &recon_format); + err = ff_hw_base_get_recon_format(base_ctx, NULL, &recon_format); if (err < 0) return err; @@ -1398,7 +1398,7 @@ int ff_d3d12va_encode_init(AVCodecContext *avctx) int err; HRESULT hr; - err = ff_hw_base_encode_init(avctx); + err = ff_hw_base_encode_init(avctx, base_ctx); if (err < 0) goto fail; @@ -1552,7 +1552,7 @@ int ff_d3d12va_encode_close(AVCodecContext *avctx) D3D12_OBJECT_RELEASE(ctx->video_device3); D3D12_OBJECT_RELEASE(ctx->device3); - ff_hw_base_encode_close(avctx); + ff_hw_base_encode_close(base_ctx); return 0; } diff --git a/libavcodec/hw_base_encode.c b/libavcodec/hw_base_encode.c index 92f69bb78c..88efdf672c 100644 --- a/libavcodec/hw_base_encode.c +++ b/libavcodec/hw_base_encode.c @@ -94,14 +94,13 @@ static void hw_base_encode_remove_refs(FFHWBaseEncodePicture *pic, int level) pic->ref_removed[level] = 1; } -static void hw_base_encode_set_b_pictures(AVCodecContext *avctx, +static void hw_base_encode_set_b_pictures(FFHWBaseEncodeContext *ctx, FFHWBaseEncodePicture *start, FFHWBaseEncodePicture *end, FFHWBaseEncodePicture *prev, int current_depth, FFHWBaseEncodePicture **last) { - FFHWBaseEncodeContext *ctx = avctx->priv_data; FFHWBaseEncodePicture *pic, *next, *ref; int i, len; @@ -148,20 +147,19 @@ static void hw_base_encode_set_b_pictures(AVCodecContext *avctx, hw_base_encode_add_ref(pic, ref, 0, 1, 0); if (i > 1) - hw_base_encode_set_b_pictures(avctx, start, pic, pic, + hw_base_encode_set_b_pictures(ctx, start, pic, pic, current_depth + 1, &next); else next = pic; - hw_base_encode_set_b_pictures(avctx, pic, end, next, + hw_base_encode_set_b_pictures(ctx, pic, end, next, current_depth + 1, last); } } -static void hw_base_encode_add_next_prev(AVCodecContext *avctx, +static void hw_base_encode_add_next_prev(FFHWBaseEncodeContext *ctx, FFHWBaseEncodePicture *pic) { - FFHWBaseEncodeContext *ctx = avctx->priv_data; int i; if (!pic) @@ -333,12 +331,12 @@ static int hw_base_encode_pick_next(AVCodecContext *avctx, } if (b_counter > 0) { - hw_base_encode_set_b_pictures(avctx, start, pic, pic, 1, + hw_base_encode_set_b_pictures(ctx, start, pic, pic, 1, &prev); } else { prev = pic; } - hw_base_encode_add_next_prev(avctx, prev); + hw_base_encode_add_next_prev(ctx, prev); return 0; } @@ -687,9 +685,9 @@ int ff_hw_base_init_gop_structure(AVCodecContext *avctx, uint32_t ref_l0, uint32 return 0; } -int ff_hw_base_get_recon_format(AVCodecContext *avctx, const void *hwconfig, enum AVPixelFormat *fmt) +int ff_hw_base_get_recon_format(FFHWBaseEncodeContext *ctx, const void *hwconfig, + enum AVPixelFormat *fmt) { - FFHWBaseEncodeContext *ctx = avctx->priv_data; AVHWFramesConstraints *constraints = NULL; enum AVPixelFormat recon_format; int err, i; @@ -722,14 +720,14 @@ int ff_hw_base_get_recon_format(AVCodecContext *avctx, const void *hwconfig, enu // No idea what to use; copy input format. recon_format = ctx->input_frames->sw_format; } - av_log(avctx, AV_LOG_DEBUG, "Using %s as format of " + av_log(ctx->avctx, AV_LOG_DEBUG, "Using %s as format of " "reconstructed frames.\n", av_get_pix_fmt_name(recon_format)); if (ctx->surface_width < constraints->min_width || ctx->surface_height < constraints->min_height || ctx->surface_width > constraints->max_width || ctx->surface_height > constraints->max_height) { - av_log(avctx, AV_LOG_ERROR, "Hardware does not support encoding at " + av_log(ctx->avctx, AV_LOG_ERROR, "Hardware does not support encoding at " "size %dx%d (constraints: width %d-%d height %d-%d).\n", ctx->surface_width, ctx->surface_height, constraints->min_width, constraints->max_width, @@ -756,10 +754,9 @@ int ff_hw_base_encode_free(FFHWBaseEncodePicture *pic) return 0; } -int ff_hw_base_encode_init(AVCodecContext *avctx) +int ff_hw_base_encode_init(AVCodecContext *avctx, FFHWBaseEncodeContext *ctx) { - FFHWBaseEncodeContext *ctx = avctx->priv_data; - + ctx->avctx = avctx; ctx->frame = av_frame_alloc(); if (!ctx->frame) return AVERROR(ENOMEM); @@ -789,10 +786,8 @@ int ff_hw_base_encode_init(AVCodecContext *avctx) return 0; } -int ff_hw_base_encode_close(AVCodecContext *avctx) +int ff_hw_base_encode_close(FFHWBaseEncodeContext *ctx) { - FFHWBaseEncodeContext *ctx = avctx->priv_data; - av_fifo_freep2(&ctx->encode_fifo); av_frame_free(&ctx->frame); diff --git a/libavcodec/hw_base_encode.h b/libavcodec/hw_base_encode.h index 15ef3d7ac6..13c1fc0f69 100644 --- a/libavcodec/hw_base_encode.h +++ b/libavcodec/hw_base_encode.h @@ -116,6 +116,7 @@ typedef struct FFHWEncodePictureOperation { typedef struct FFHWBaseEncodeContext { const AVClass *class; + AVCodecContext *avctx; // Hardware-specific hooks. const struct FFHWEncodePictureOperation *op; @@ -222,13 +223,14 @@ int ff_hw_base_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt); int ff_hw_base_init_gop_structure(AVCodecContext *avctx, uint32_t ref_l0, uint32_t ref_l1, int flags, int prediction_pre_only); -int ff_hw_base_get_recon_format(AVCodecContext *avctx, const void *hwconfig, enum AVPixelFormat *fmt); +int ff_hw_base_get_recon_format(FFHWBaseEncodeContext *ctx, const void *hwconfig, + enum AVPixelFormat *fmt); int ff_hw_base_encode_free(FFHWBaseEncodePicture *pic); -int ff_hw_base_encode_init(AVCodecContext *avctx); +int ff_hw_base_encode_init(AVCodecContext *avctx, FFHWBaseEncodeContext *ctx); -int ff_hw_base_encode_close(AVCodecContext *avctx); +int ff_hw_base_encode_close(FFHWBaseEncodeContext *ctx); #define HW_BASE_ENCODE_COMMON_OPTIONS \ { "idr_interval", \ diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index b35a23e852..0693e77548 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -2059,7 +2059,7 @@ static av_cold int vaapi_encode_create_recon_frames(AVCodecContext *avctx) } hwconfig->config_id = ctx->va_config; - err = ff_hw_base_get_recon_format(avctx, (const void*)hwconfig, &recon_format); + err = ff_hw_base_get_recon_format(base_ctx, (const void*)hwconfig, &recon_format); if (err < 0) goto fail; @@ -2106,7 +2106,7 @@ av_cold int ff_vaapi_encode_init(AVCodecContext *avctx) VAStatus vas; int err; - err = ff_hw_base_encode_init(avctx); + err = ff_hw_base_encode_init(avctx, base_ctx); if (err < 0) goto fail; @@ -2313,7 +2313,7 @@ av_cold int ff_vaapi_encode_close(AVCodecContext *avctx) av_freep(&ctx->codec_sequence_params); av_freep(&ctx->codec_picture_params); - ff_hw_base_encode_close(avctx); + ff_hw_base_encode_close(base_ctx); return 0; }