From patchwork Fri Aug 18 14:24:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 43259 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4c9d:b0:130:ccc6:6c4b with SMTP id fq29csp2707694pzb; Fri, 18 Aug 2023 07:26:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGc0pOcSAPvHeCAefui0hUhG8vhGTjWH7ORho10v/wp4Ap9GyGKViBiuJsbpY61YHVNFJ49 X-Received: by 2002:a17:907:2cf8:b0:993:ec0b:1a24 with SMTP id hz24-20020a1709072cf800b00993ec0b1a24mr2161025ejc.7.1692368775040; Fri, 18 Aug 2023 07:26:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692368775; cv=none; d=google.com; s=arc-20160816; b=MMqZ78+XwI8QTb4yJPjF2PeedvDPzOAg1E2Sqv23P4iW9qqImv4G6OO/v/RzjxvqpJ cDA6HzueeP4G/Tb3Mrz5fWq9LFZn2ehAwHc/XuMqU1GCCb01vAptaeADHbezks1qIK+C 2hxUfeo6PW9KZ1uq55LvPZS5900o534/5jJkhRV7VHS1rHqPQQjcGhtVCkbCXLlYe0o/ 6EB1rjP6jfi7Jvn0r1iom4zYJ0pczoSYRKsv41EmTOOBl+iwow7lPJY80kF+VYZ8K+GM xB+BXRXB/J9QrWOH5AEDOyfV70nd0Jh9sKXmzlOAnqDUmYA4shGjqSskVYGmhR7AqWgF 0ogQ== 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:date :to:from:message-id:dkim-signature:delivered-to; bh=r5UA/FR1T4+D9x6S/xr2reNTXiHxSH5acFQS2i5gcDk=; fh=fgsEC5uuZOuzV7r9mTXgvURIGbxpRO08JRnNlycBIXw=; b=QMdfMmo/8e26K1JCM7sIG8zSt7hKzCwXdzeVhFuAR6GBdXeajEfcje9+WEn8KNX5nU sqm2sye/itpgGYfut+M7OJoSeJt4lRAMYfbsTccd7zWb/RAASyA/7NX4Nntndto2RY1s HCpGvGnmbevC+/txiD2BDe0AGUmoe9WJ+FzI0uHSPJKUQbqEuEqHe2WtZ+rsdkYOIm0o bOr1Gvc2DU+lb7i4q6FDrtahnjxJaklO84Sh6bTy6JOgDIpHSGhZcdPu1jlou+ih/w5H cGjSgAdIfux2t2rhq6hujCcJgOoWmB0ZLe+WmQ1Fvg7nNG0dFp45VTYTICrq4wk9My2/ 8apw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=GZEzQ3H5; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gl25-20020a170906e0d900b0099bd1dc4c3fsi1342835ejb.154.2023.08.18.07.26.14; Fri, 18 Aug 2023 07:26:15 -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=@foxmail.com header.s=s201512 header.b=GZEzQ3H5; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B2A8268C69A; Fri, 18 Aug 2023 17:25:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-235.mail.qq.com (out203-205-221-235.mail.qq.com [203.205.221.235]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AC97F68C5DD for ; Fri, 18 Aug 2023 17:25:37 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1692368729; bh=g2VveARFVEIqh2JTuDjM6DDwS/5Micfk9XVaRZh3bLI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GZEzQ3H52Jw/VfelqynMzpFkLBIHqQIfctxlNlhtuvzo+xVxy6SO3GGQgU31CPPwi LFERVo+AqkjEtxtmZGnZu3/87XU7XGxN6/npFyGgVqno13GRel80gatnhygSdZNoKn 1ig8awVp397FjhZJgV5UD0Ehp0rMhD4igl2bHirs= Received: from ZHILIZHAO-MB2.tencent.com ([119.147.10.200]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 6099E8C6; Fri, 18 Aug 2023 22:24:09 +0800 X-QQ-mid: xmsmtpt1692368728tx6ajs5rv Message-ID: X-QQ-XMAILINFO: NvH2zBBgt3uTwffz0RAPyBDHOCz2E4CP7NgSjVXiISsjFu08m+t4Gal+09jNwD YNFKvoABG+6jDUfPb6Sr3SzWP6FfVSb6wQQOPB2KFHLRLEib3wrQcRcUf5YXMIk6yTD3ptcZSYsw b4rAIUlp158ujRTQ5Q/p+vsc3J1UlCCs6AuDvkOXtgIBhrbK267VNVwwJkLem3kuMXzQl0kos/Fd /8j9P3sNxgrSeH53NlZnL/KCRnEZ4u/uZvPVjnDFzXBD1n6KP/oF2EOOkapAMzVHOuLeUaS+AurO p/0yAmQQGcEx0oVFyInVUyEfvDFCwCLOi3+NtJI3RxnQkbd2E4kNWaWoHNc4lFbFBKkxqfnbduyv QkunO5WlvDV/spoKOcRz6Os4bVB8A1NzqaO5Dwh4Fy/oMS3YcvKXv8nvFEkP0hzL6DovGfryhVJg 33QfpYx2kMgvghXteZvIHwODyTnc1yQ9cvVBjZEXVANLMRUQtGq2bGrSvl3ncysemJl4VZ5I2kjL MFgXhc80e4mj4wHt+9O+/ECJ5+KMB/BwKUXJZ1X1hxVkSTei44c7GLfEQ2hlBVyFxC4wS5y53Koi UViaUesPxr+pmCqNkTdHNiOIGzA1pKTW3sLz+QTVtedJw0WOCbHs9S2rdDGiRzPMV/LkZXLWR+NB 39zOyq92fd52569m1IIkNoxVWGRD2PuMPJVJ/HwpqYDftdyBT77PvJ3BwBoLDGVwn1/yXweTvgky om9olsmWB0BNjOkBQETeVci4+C2yWLXkL60rdOXYx2pu7WAqDsBIkhprIDq6rae6Zh8bGZAtIkfA sIGBYRGeEBj3WhcCI4w8c1RDK06xxARmernobpzkF00lml0oWKimH4Dya3gRQkDfAue4sFBeVWWF 3KMnl0Q1IJZPQFT/1jB/RLB7Cs9m+wPWy+BJ9NgTXEHfTnTacPdcYTA6LYlHib/QKizlxVRIJ6oW uugsocJUIO8SJrI1seFn17bEZUJrNJTXNm7JhntVaZbF0wOcDkeg== X-QQ-XMRINFO: Nq+8W0+stu50PRdwbJxPCL0= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Aug 2023 22:24:07 +0800 X-OQ-MSGID: <20230818142408.74329-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230818142408.74329-1-quinkblack@foxmail.com> References: <20230818142408.74329-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avfilter/vf_transpose_vt: fix output frame dimension 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Nief7rGX1Gr1 From: Zhao Zhili Create a new hardware frame context when necessary. Signed-off-by: Zhao Zhili --- libavfilter/vf_transpose_vt.c | 47 +++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_transpose_vt.c b/libavfilter/vf_transpose_vt.c index b5b07e9ef1..da59479a4b 100644 --- a/libavfilter/vf_transpose_vt.c +++ b/libavfilter/vf_transpose_vt.c @@ -102,6 +102,39 @@ fail: return ret; } +static int transpose_vt_recreate_hw_ctx(AVFilterLink *outlink) +{ + AVFilterContext *avctx = outlink->src; + AVFilterLink *inlink = outlink->src->inputs[0]; + AVHWFramesContext *hw_frame_ctx_in; + AVHWFramesContext *hw_frame_ctx_out; + int err; + + av_buffer_unref(&outlink->hw_frames_ctx); + + hw_frame_ctx_in = (AVHWFramesContext *)inlink->hw_frames_ctx->data; + outlink->hw_frames_ctx = av_hwframe_ctx_alloc(hw_frame_ctx_in->device_ref); + hw_frame_ctx_out = (AVHWFramesContext *)outlink->hw_frames_ctx->data; + hw_frame_ctx_out->format = AV_PIX_FMT_VIDEOTOOLBOX; + hw_frame_ctx_out->sw_format = hw_frame_ctx_in->sw_format; + hw_frame_ctx_out->width = outlink->w; + hw_frame_ctx_out->height = outlink->h; + + err = ff_filter_init_hw_frames(avctx, outlink, 1); + if (err < 0) + return err; + + err = av_hwframe_ctx_init(outlink->hw_frames_ctx); + if (err < 0) { + av_log(avctx, AV_LOG_ERROR, + "Failed to init videotoolbox frame context, %s\n", + av_err2str(err)); + return err; + } + + return 0; +} + static int transpose_vt_config_output(AVFilterLink *outlink) { int err; @@ -113,6 +146,9 @@ static int transpose_vt_config_output(AVFilterLink *outlink) CFBooleanRef hflip = kCFBooleanFalse; int swap_w_h = 0; + av_buffer_unref(&outlink->hw_frames_ctx); + outlink->hw_frames_ctx = av_buffer_ref(inlink->hw_frames_ctx); + if ((inlink->w >= inlink->h && s->passthrough == TRANSPOSE_PT_TYPE_LANDSCAPE) || (inlink->w <= inlink->h && s->passthrough == TRANSPOSE_PT_TYPE_PORTRAIT)) { av_log(avctx, AV_LOG_VERBOSE, @@ -175,12 +211,12 @@ static int transpose_vt_config_output(AVFilterLink *outlink) return AVERROR_EXTERNAL; } - if (swap_w_h) { - outlink->w = inlink->h; - outlink->h = inlink->w; - } + if (!swap_w_h) + return 0; - return 0; + outlink->w = inlink->h; + outlink->h = inlink->w; + return transpose_vt_recreate_hw_ctx(outlink); } #define OFFSET(x) offsetof(TransposeVtContext, x) @@ -244,4 +280,5 @@ const AVFilter ff_vf_transpose_vt = { FILTER_SINGLE_PIXFMT(AV_PIX_FMT_VIDEOTOOLBOX), .priv_class = &transpose_vt_class, .flags = AVFILTER_FLAG_HWDEVICE, + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, };