From patchwork Fri Oct 18 23:05:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52393 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp1394348vqi; Sat, 19 Oct 2024 00:24:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXviwUMJ9T/o0uB4c9WEDvf9gE1DVvhZ0gklIxKVhM3iKFqykCkFgWeHzUi2zxhDpbDBHrXUIO1wRWXNIlVnQSI@gmail.com X-Google-Smtp-Source: AGHT+IFrbg/lzb6CW5Wuv+RUT1qWAJzEk6t0tc9DZJKqH6AF0k1/6+f6f6Ee0XBCQLOk0VLfw3Y2 X-Received: by 2002:a2e:be27:0:b0:2fb:60d8:7422 with SMTP id 38308e7fff4ca-2fb8320f963mr42473001fa.42.1729322655658; Sat, 19 Oct 2024 00:24:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729322655; cv=none; d=google.com; s=arc-20240605; b=KiXRI8DfRr+K5cG50zG/Zbk7ZuaE2bqM0jrJtqkhVr3yH2bf9iTHjlyuqPkgMSfL12 x4DOeriCx82tax0m0dq5Ujfibc1mQKZ4THjVlIKY4aSqzZkeFcdvQdolvcGdLdg2wD80 aSDlWn+xPPPsm0xq7ufwWr9becFg2sNX/z4ksWFEGsNFDWygvmu0Xkzg8WJf9mu2O18O Vd85Fabqi194ftlC5+yXDQ5b5u0PwOxnDQthm+qkusZ9ZOzCu07rhPElkA69V3ybyllp kMXDeSxMMhcyYIUJGfe0eXALWhd1NXwXThxMh2Y7kEBAeBSJ19Hs3lpurVT0+wC/Xd9a zZkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:message-id:date:to:from :dkim-signature:delivered-to; bh=pAQCd78G80l2AXlbupxQqXT8SMawTVxNJRzauSBfFAc=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=FfP5Uc1XYutJu0XwhZL/H0TaZhdH4hulBG6e6waaMcW5hCl6h4+SNPJPHo0nf4mkFk aSeyx8mAumfET0WLJxYQIlclTWQvD/NSx+m+eRiKBYMwLpGfpa85qseysB4IHtXUrvuN Zb9MIshPq2U42bQMZ7eOe73jNLNuMPVoQ4FZSVpjwAaQRO3NCQok/OdTSidxbXG2h2Y0 WWvn3wtCnX2Bx6ogs1sdoY2bZybkp1ef1E4H9i+AspykvMvnfOS3OwuSHm6IOYvVZx6s vvSnEop+UgmuUbBZkGP0L9UNZMrX2lL7uw9EGWM/u09XixxK53AsYLTwcMSJZH9zNUfw Hduw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="T0S1Z/vH"; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2fb80a2d3e4si10459711fa.393.2024.10.19.00.24.15; Sat, 19 Oct 2024 00:24: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=@gmail.com header.s=20230601 header.b="T0S1Z/vH"; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 53FBB68DCF0; Sat, 19 Oct 2024 02:06:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0700268CFAC for ; Sat, 19 Oct 2024 02:06:16 +0300 (EEST) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-20c7edf2872so29108705ad.1 for ; Fri, 18 Oct 2024 16:06:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729292774; x=1729897574; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=5Jk5Am0DOf1UYZHz1oqdIfrEzCyWcDldaBLnxzNGCZA=; b=T0S1Z/vHd2aCPkSpxwRggl4ojMIgSciG5e4L7SbBynqmD8c5vgCrElefNfTZay5jkp kdBH+4xve+K15kgpeFBlUzqBXPgQ0H5Ivop2Ogso4fiVZaYzZmYBukxv3FMNaE4Rmxrv k9PIO5hkxRZysD3GXTGsYAa9BW/+Fdnri8FbipuaNzqfDn9JRX1ZzBv8aYl2uBV129hX uZs6ItXkLGdcUP/TS+TBpHz9vM61s6Unv+QM4VKVhon5ziqUEDKOAgeYN6fgAC43nnE+ Qf6iPY74AScksneKmbRzoTDHbre4xg946dl7tUvtYxiyrpCF2FD8YG0OPd9HW4GYqfM8 udGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729292774; x=1729897574; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5Jk5Am0DOf1UYZHz1oqdIfrEzCyWcDldaBLnxzNGCZA=; b=SSPG7mtzP72/qZ3pXv2MAPvz+xQDfbPh3urLr3sO7yas49h7RWBAihqER7iiVYix+A w1IGugrCoBuw9RZawQe/r9ne4RLeUttraDwYUXOLtWSMrdeHaZOO6QvMp0rl3gREl3ap VPsTsobz4nHC//rABsh9kJRtrBokyAfvhEi63QLVvvX/XydM16tt+jLFTMdRcZYeSJaI YqWAOEruofnSC6lHrX+ibnjxQyKbiapXoTsnYA1Q8pyQpFM0+UZOvCzi+9J5F6oB1p2/ cB79Vvc3mtZckpUG/7ZAG4/P+P+kLnzLlVN3jXw+1Q404/G/MGQH9tvnyAo2h2hlHRMu 5FUA== X-Gm-Message-State: AOJu0Yz3LbqIK1oGM2Ze18v5aysyMholZE5mEJ6C8yEgxHaDElLsF9xZ 2D7wy1fMx14wXetXOp4RG4yGx5CnWdZX1MYH2mXwDDrAO88LM1ICGSLRrDyM X-Received: by 2002:a17:903:32cf:b0:20c:6bff:fcb1 with SMTP id d9443c01a7336-20e5c0d32a5mr70437295ad.1.1729292773836; Fri, 18 Oct 2024 16:06:13 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:493a:a469:ed1d:5e06]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20e5a912dafsm17809655ad.276.2024.10.18.16.06.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 18 Oct 2024 16:06:13 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Oct 2024 16:05:49 -0700 Message-Id: <20241018230552.80169-1-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] scale_vt frame crop support 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: Koushik Dutta Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: CIN4QgIozyZE The crop filter has no effect on scale_vt: -vf crop=100:100,scale_vt=300x300 Hardware frames (AV_PIX_FMT_FLAG_HWACCEL) are expected to use the crop_* properties, as seen in the implementation vf_crop.c. The current workaround is to hwdownload the full frame and perform the crop on CPU. --- libavfilter/vf_scale_vt.c | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/libavfilter/vf_scale_vt.c b/libavfilter/vf_scale_vt.c index 05f4e7b797..3da46a6cd5 100644 --- a/libavfilter/vf_scale_vt.c +++ b/libavfilter/vf_scale_vt.c @@ -109,6 +109,8 @@ static av_cold int scale_vt_init(AVFilterContext *avctx) VTSessionSetProperty(s->transfer, kVTPixelTransferPropertyKey_DestinationYCbCrMatrix, value); } + VTSessionSetProperty(s->transfer, kVTPixelTransferPropertyKey_ScalingMode, kVTScalingMode_CropSourceToCleanAperture); + return 0; } @@ -132,6 +134,18 @@ static int scale_vt_filter_frame(AVFilterLink *link, AVFrame *in) CVPixelBufferRef src; CVPixelBufferRef dst; + int left; + int top; + int width; + int height; + CFNumberRef crop_width_num; + CFNumberRef crop_height_num; + CFNumberRef crop_offset_left_num; + CFNumberRef crop_offset_top_num; + const void *clean_aperture_keys[4]; + const void *source_clean_aperture_values[4]; + CFDictionaryRef source_clean_aperture; + AVFrame *out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { ret = AVERROR(ENOMEM); @@ -153,8 +167,43 @@ static int scale_vt_filter_frame(AVFilterLink *link, AVFrame *in) if (s->colour_matrix != AVCOL_SPC_UNSPECIFIED) out->colorspace = s->colour_matrix; + width = (in->width - in->crop_right) - in->crop_left; + height = (in->height - in->crop_bottom) - in->crop_top; + // The crop offsets are relative to the center of the frame. + // the crop width and crop height are relative to the center of the crop rect, not top left as normal. + left = in->crop_left - in->width / 2 + width / 2; + top = in->crop_top - in->height / 2 + height / 2; + crop_width_num = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &width); + crop_height_num = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &height); + crop_offset_left_num = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &left); + crop_offset_top_num = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &top); + + clean_aperture_keys[0] = kCVImageBufferCleanApertureWidthKey; + clean_aperture_keys[1] = kCVImageBufferCleanApertureHeightKey; + clean_aperture_keys[2] = kCVImageBufferCleanApertureHorizontalOffsetKey; + clean_aperture_keys[3] = kCVImageBufferCleanApertureVerticalOffsetKey; + + source_clean_aperture_values[0] = crop_width_num; + source_clean_aperture_values[1] = crop_height_num; + source_clean_aperture_values[2] = crop_offset_left_num; + source_clean_aperture_values[3] = crop_offset_top_num; + + source_clean_aperture = CFDictionaryCreate(kCFAllocatorDefault, + clean_aperture_keys, + source_clean_aperture_values, + 4, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + CFRelease(crop_width_num); + CFRelease(crop_height_num); + CFRelease(crop_offset_left_num); + CFRelease(crop_offset_top_num); + src = (CVPixelBufferRef)in->data[3]; dst = (CVPixelBufferRef)out->data[3]; + CVBufferSetAttachment(src, kCVImageBufferCleanApertureKey, + source_clean_aperture, kCVAttachmentMode_ShouldPropagate); ret = VTPixelTransferSessionTransferImage(s->transfer, src, dst); if (ret != noErr) { av_log(ctx, AV_LOG_ERROR, "transfer image failed, %d\n", ret); @@ -162,6 +211,7 @@ static int scale_vt_filter_frame(AVFilterLink *link, AVFrame *in) goto fail; } + CFRelease(source_clean_aperture); av_frame_free(&in); return ff_filter_frame(outlink, out); From patchwork Fri Oct 18 23:05:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52396 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp1441454vqi; Sat, 19 Oct 2024 02:44:21 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVy2fb7lOzM8U9y60+9YpooxSpjG55S8kodd775yVuX44cHEzFP5F7PF8NCtZMa+4MiIgLPZDdBVV17mV2kENx1@gmail.com X-Google-Smtp-Source: AGHT+IGrImboWSiQEx+d45knbyYXyuGTZ50AC/hxBlRg1/Bsc6Ek7tYfHdyufyVrfoAVU8Xwftc5 X-Received: by 2002:a2e:701:0:b0:2fa:c0df:3d91 with SMTP id 38308e7fff4ca-2fb82eaedbemr23024771fa.19.1729331061706; Sat, 19 Oct 2024 02:44:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729331061; cv=none; d=google.com; s=arc-20240605; b=AcAPk3ilww6efVMk5weFGrc4RVgbQuGuj+D5Eu+fgLPxjFdLggrcrdBUgYpNSNL+dV 4QYUPNBVPkc6ryp5bNEya5A+1JyuHBw6Q7b9afztb6QVVk81FO4lFNXi5Dclk2qYlR+U eDG12mXpUlYAB1aVZswNXrnhLQunFidelGnXTPOLwPwqaEDk6G/XGt9Mb32w8qncooPl /b0Hr+R96EOpxOYlrNifc7sIjzrKv/4C+M8FQRFuxvHJ6j0hELfdMZYcvI6fLE6G64MT kOM1Wvcf8kc5+akOrx5BJErIZOB4Mc0yLt/iS+2g1F0X/fC8WHbW0FZ5ILEF5wkGoDPt 4V5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=bFdK+mAnJa2OkDFp7lIO4CDrjH46W2GjzExr4HnI3YY=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=RPLFHUPJaCGvXck0zMcD3QDcOKSqB3RVASzzILjhIn1VLiocJ8a6HnZbYqGpjAMo5N zJRkhWYEswBtlPgKPIqPCaVghKrIUkbYJcQN3c16pATN+54g/uKaQW3GtNAbhn9Z10sV AonPAkvs22yWaz5DP98rXJRYbB3/A+8yvtszfoznPKQk0yMMllq6IQUfUpwTAKIyXS+1 2rsOddXKL+2814QjhkCz31aeIq6lZHaCKpG4cWpUmT9ZwPmNylFTkW0LYUnbZcR0uooT B3D55CPRe5PgJn7F7Csx6vDjb8gRzawuVOhyIsx7jgtP7pmTZDuYtwkM76zkYWzBcam9 f6Tg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=GWYvDzS8; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2fb809c5e80si11082941fa.182.2024.10.19.02.44.21; Sat, 19 Oct 2024 02:44:21 -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=@gmail.com header.s=20230601 header.b=GWYvDzS8; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0ACE468DD37; Sat, 19 Oct 2024 02:06:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E7AA568DA68 for ; Sat, 19 Oct 2024 02:06:16 +0300 (EEST) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-20ca388d242so20020745ad.2 for ; Fri, 18 Oct 2024 16:06:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729292775; x=1729897575; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dWs4DtCs1gmBZztB6d/McYLwkYGfWDlgejSjjPCinng=; b=GWYvDzS84e/HF5FNbtNJN6gVbFZCF31dlCnHN2tg2026wBDskTzeluCjXPnhUiT4IQ 1y5ziUTUJ1QvuwYVSumxDfmqKngreu06NGnCF/yr55JiN/K0v94RIzgHUjD/G83XWfbW fVayCRbEDv+rcnaQzv1mchXzPZlmzZYap1gKGSxtBLMiMaCY6eIRu+ASAnvRm4uuwiaF ThJ7PQVN/D9+irJy9RLNhzxHTakmDCozTTuxtMB9Zfs3ZIBokZv3r2XxKvPS00UTwPyx veYzeGBVCuyGw+CQsJ2A+6hwzxmFx9lyP1j3i0LhRlUwH03epW9/J0HMAdOCMKvJ73rS Dc6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729292775; x=1729897575; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dWs4DtCs1gmBZztB6d/McYLwkYGfWDlgejSjjPCinng=; b=hzr5YpFRYiQDAWN8pBIIGZ8xWxN2lrEKTIiHCyxSJuP1kPaoQu9rNa+dejfOv8YLTn 87Uq6JvcnMJs4kUAmmoB7wSqjam5+p1xZsfqCWJOoWXf9CkRBTNGhD7sBNFEZg6Ko2r8 7TKn0wo7JBe/ffXEamH1YMwqmwGrADJF0wpLQglg9v6fBtZptEmPmzC74CTCPOGlXNUn F5FmRRiVjvWJzD5o9JdoFeM7R97BzFHz659mN9k3e1mR1FUS5bYnnTmWtK4YZbR6Qx23 Fmjwq4qmZlB0YaQPtGRSL2dnGFuKnQoqjGxjByCLgzQtN8OfPLyT5S48ACjfB/G9fT3z zbsA== X-Gm-Message-State: AOJu0YyYCrWkWSjKjNDJeAv5mjaDEs2vbu9sRAJCQopd/+ePxhQTEzx7 vp5uJJMmVzB7zViEHZi8+d24juT7zYYh4MI1vDGOd1nGCYcCtBdTlIi9dA== X-Received: by 2002:a17:902:f68a:b0:20c:aa41:9968 with SMTP id d9443c01a7336-20e5a9587c3mr44442395ad.53.1729292774947; Fri, 18 Oct 2024 16:06:14 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:493a:a469:ed1d:5e06]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20e5a912dafsm17809655ad.276.2024.10.18.16.06.14 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 18 Oct 2024 16:06:14 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Oct 2024 16:05:50 -0700 Message-Id: <20241018230552.80169-2-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241018230552.80169-1-koushd@gmail.com> References: <20241018230552.80169-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] scale_cuda frame crop support 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: Koushik Dutta Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Wx/yE3JKltmG The crop filter has no effect on scale_cuda: -vf crop=100:100,scale_cuda=300x300 Hardware frames (AV_PIX_FMT_FLAG_HWACCEL) are expected to use the crop_* properties, as seen in the implementation vf_crop.c. The current workaround is to hwdownload the full frame and perform the crop on CPU. --- libavfilter/vf_scale_cuda.c | 17 +++++++++++------ libavfilter/vf_scale_cuda.cu | 22 ++++++++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/libavfilter/vf_scale_cuda.c b/libavfilter/vf_scale_cuda.c index 54a340949d..8615da308a 100644 --- a/libavfilter/vf_scale_cuda.c +++ b/libavfilter/vf_scale_cuda.c @@ -407,7 +407,7 @@ fail: } static int call_resize_kernel(AVFilterContext *ctx, CUfunction func, - CUtexObject src_tex[4], int src_width, int src_height, + CUtexObject src_tex[4], int src_left, int src_top, int src_width, int src_height, AVFrame *out_frame, int dst_width, int dst_height, int dst_pitch) { CUDAScaleContext *s = ctx->priv; @@ -422,7 +422,7 @@ static int call_resize_kernel(AVFilterContext *ctx, CUfunction func, &src_tex[0], &src_tex[1], &src_tex[2], &src_tex[3], &dst_devptr[0], &dst_devptr[1], &dst_devptr[2], &dst_devptr[3], &dst_width, &dst_height, &dst_pitch, - &src_width, &src_height, &s->param + &src_left, &src_top, &src_width, &src_height, &s->param }; return CHECK_CU(cu->cuLaunchKernel(func, @@ -440,6 +440,9 @@ static int scalecuda_resize(AVFilterContext *ctx, CUtexObject tex[4] = { 0, 0, 0, 0 }; + int crop_width = (in->width - in->crop_right) - in->crop_left; + int crop_height = (in->height - in->crop_bottom) - in->crop_top; + ret = CHECK_CU(cu->cuCtxPushCurrent(cuda_ctx)); if (ret < 0) return ret; @@ -477,7 +480,7 @@ static int scalecuda_resize(AVFilterContext *ctx, // scale primary plane(s). Usually Y (and A), or single plane of RGB frames. ret = call_resize_kernel(ctx, s->cu_func, - tex, in->width, in->height, + tex, in->crop_left, in->crop_top, crop_width, crop_height, out, out->width, out->height, out->linesize[0]); if (ret < 0) goto exit; @@ -485,8 +488,10 @@ static int scalecuda_resize(AVFilterContext *ctx, if (s->out_planes > 1) { // scale UV plane. Scale function sets both U and V plane, or singular interleaved plane. ret = call_resize_kernel(ctx, s->cu_func_uv, tex, - AV_CEIL_RSHIFT(in->width, s->in_desc->log2_chroma_w), - AV_CEIL_RSHIFT(in->height, s->in_desc->log2_chroma_h), + AV_CEIL_RSHIFT(in->crop_left, s->in_desc->log2_chroma_w), + AV_CEIL_RSHIFT(in->crop_top, s->in_desc->log2_chroma_h), + AV_CEIL_RSHIFT(crop_width, s->in_desc->log2_chroma_w), + AV_CEIL_RSHIFT(crop_height, s->in_desc->log2_chroma_h), out, AV_CEIL_RSHIFT(out->width, s->out_desc->log2_chroma_w), AV_CEIL_RSHIFT(out->height, s->out_desc->log2_chroma_h), @@ -545,7 +550,7 @@ static int cudascale_filter_frame(AVFilterLink *link, AVFrame *in) CUcontext dummy; int ret = 0; - if (s->passthrough) + if (s->passthrough && !in->crop_left && !in->crop_top && !in->crop_right && !in->crop_bottom) return ff_filter_frame(outlink, in); out = av_frame_alloc(); diff --git a/libavfilter/vf_scale_cuda.cu b/libavfilter/vf_scale_cuda.cu index de06ba9433..271b55cd5d 100644 --- a/libavfilter/vf_scale_cuda.cu +++ b/libavfilter/vf_scale_cuda.cu @@ -26,6 +26,7 @@ template using subsample_function_t = T (*)(cudaTextureObject_t tex, int xo, int yo, int dst_width, int dst_height, + int src_left, int src_top, int src_width, int src_height, int bit_depth, float param); @@ -64,11 +65,12 @@ static inline __device__ ushort conv_16to10(ushort in) subsample_function_t subsample_func_uv> \ __device__ static inline void N(cudaTextureObject_t src_tex[4], T *dst[4], int xo, int yo, \ int dst_width, int dst_height, int dst_pitch, \ - int src_width, int src_height, float param) + int src_left, int src_top, int src_width, int src_height, float param) #define SUB_F(m, plane) \ subsample_func_##m(src_tex[plane], xo, yo, \ dst_width, dst_height, \ + src_left, src_top, \ src_width, src_height, \ in_bit_depth, param) @@ -1063,13 +1065,14 @@ template __device__ static inline T Subsample_Nearest(cudaTextureObject_t tex, int xo, int yo, int dst_width, int dst_height, + int src_left, int src_top, int src_width, int src_height, int bit_depth, float param) { float hscale = (float)src_width / (float)dst_width; float vscale = (float)src_height / (float)dst_height; - float xi = (xo + 0.5f) * hscale; - float yi = (yo + 0.5f) * vscale; + float xi = (xo + 0.5f) * hscale + src_left; + float yi = (yo + 0.5f) * vscale + src_top; return tex2D(tex, xi, yi); } @@ -1078,13 +1081,14 @@ template __device__ static inline T Subsample_Bilinear(cudaTextureObject_t tex, int xo, int yo, int dst_width, int dst_height, + int src_left, int src_top, int src_width, int src_height, int bit_depth, float param) { float hscale = (float)src_width / (float)dst_width; float vscale = (float)src_height / (float)dst_height; - float xi = (xo + 0.5f) * hscale; - float yi = (yo + 0.5f) * vscale; + float xi = (xo + 0.5f) * hscale + src_left; + float yi = (yo + 0.5f) * vscale + src_top; // 3-tap filter weights are {wh,1.0,wh} and {wv,1.0,wv} float wh = min(max(0.5f * (hscale - 1.0f), 0.0f), 1.0f); float wv = min(max(0.5f * (vscale - 1.0f), 0.0f), 1.0f); @@ -1109,13 +1113,14 @@ template __device__ static inline T Subsample_Bicubic(cudaTextureObject_t tex, int xo, int yo, int dst_width, int dst_height, + int src_left, int src_top, int src_width, int src_height, int bit_depth, float param) { float hscale = (float)src_width / (float)dst_width; float vscale = (float)src_height / (float)dst_height; - float xi = (xo + 0.5f) * hscale - 0.5f; - float yi = (yo + 0.5f) * vscale - 0.5f; + float xi = (xo + 0.5f) * hscale - 0.5f + src_left; + float yi = (yo + 0.5f) * vscale - 0.5f + src_top; float px = floor(xi); float py = floor(yi); float fx = xi - px; @@ -1147,7 +1152,7 @@ __device__ static inline T Subsample_Bicubic(cudaTextureObject_t tex, cudaTextureObject_t src_tex_2, cudaTextureObject_t src_tex_3, \ T *dst_0, T *dst_1, T *dst_2, T *dst_3, \ int dst_width, int dst_height, int dst_pitch, \ - int src_width, int src_height, float param + int src_left, int src_top, int src_width, int src_height, float param #define SUBSAMPLE(Convert, T) \ cudaTextureObject_t src_tex[4] = \ @@ -1159,6 +1164,7 @@ __device__ static inline T Subsample_Bicubic(cudaTextureObject_t tex, Convert( \ src_tex, dst, xo, yo, \ dst_width, dst_height, dst_pitch, \ + src_left, src_top, \ src_width, src_height, param); extern "C" { From patchwork Fri Oct 18 23:05:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52397 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp1466793vqi; Sat, 19 Oct 2024 03:54:12 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW6kacoNRAm5Z7xBdR3xlUdDSff4jCzLVZAMruDlLDX6nEaD89JsQ+hn4yBKL9PlJaAK79cRyqxNFdzbCE60puT@gmail.com X-Google-Smtp-Source: AGHT+IE81vlmGJSU2+1tuxfvPtwtsgosckCAWfCOA1t0a1CyqX00RaM/zD17HHM+yWfNhe6w2SMI X-Received: by 2002:a17:906:6a24:b0:a9a:296:b501 with SMTP id a640c23a62f3a-a9a69a684efmr507915966b.26.1729335251683; Sat, 19 Oct 2024 03:54:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729335251; cv=none; d=google.com; s=arc-20240605; b=ZuTk/SC7FrjW/bPgydAWMIwOgdQ/8nSPPY7yHsgrA6+X/X7oZoCEiiVWg0w0yADjlG 9VBOdRXaXoKVCerhoEMDcGWIahEDiHbX4shFKnYTyoN7EY+7ChqZQsvtNjPjqD7nCXqm TfIumjgrw5hi8ZA4y6dfhHLHQmja9hv7cuxvI6ZlWAlW6FWIRbQPrmwF8SNkWhRsI1Iq U5yXAljxACxdLnVcIYYsVT8lb60EtbEdEEmTna2KO8k2XuZ/WfU8yHLLG5A5EG+DPGqF uMx9OrMEjBg3Hd0mt+eU/74WiD6ZhHnmFak5cX3bl7kYgZw3MlVJ6gx0HKuQzBw4rPgI 0c7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=y1eGd07yn9+HYcDOTlwaXd9jnZtTQY/IfTZuAf8DWe0=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=hN/dwI7+ZMP93Bxrt145d0h47MaCfNZZrSO7bXshK2U/k/ifBRpwcXki6RawxApkVG Ss3/fhsjfWToWkKE4dz2zCDml+1nGGYTwvpoWGyO3xYPhd1jCTNw5kiqmzY1htQjf/Ws 6Jtv0YapGd14a3/8pgTVPNHuNhQA7wvaVieUw3kAT47u/49aO+GV3YdsHyCR/DU1gLOl VDWB1P10DCUUaRvzWXTTwjvQXLpiACure0T7brcj8hH9zM3tyLOurc6jv0HL6AHxhuU1 0YFt1x7KyYtAvB0K4n749HonA+lRbyOLiVuS2ysdCKi/5F8JGaOG6iSZADpyaetZptDf HERQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=F3xttRha; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a9a68bf785esi274302366b.575.2024.10.19.03.54.11; Sat, 19 Oct 2024 03:54:11 -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=@gmail.com header.s=20230601 header.b=F3xttRha; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5956868DDA2; Sat, 19 Oct 2024 02:06:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A59A68DD13 for ; Sat, 19 Oct 2024 02:06:18 +0300 (EEST) Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-20c767a9c50so25703005ad.1 for ; Fri, 18 Oct 2024 16:06:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729292776; x=1729897576; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nZNBMasmzn5GJqgNrkMf2/WF4fiTfX8W77rCZ+wcT6U=; b=F3xttRha8g+jhsui2dx38pfKq12iAYOdq5jpzwq08Ez6OVVSVDpSXguODDhszxmVcQ q76JdAFkKLeXzrME+oWljUIY4cHrGJo64b3cHb2iq4wSXePMvNRLOLdL5pkezU77HTK1 Lob8NYrNfLPnlwZWOi6vAVhCqEJMoowZiujGkATb1WCDhc7DK9+KgPXM77faSHQ5H6Ll 0q3g6/u7HDTYrH0AgcmgiNM/gknrtvsx5BuyXovRoSicrLPiFs9A/HY27frZMTAzf3oB UUKMnfosLSZ7ioX5nlIlDvvsI1fYAX91jLPIGeCXNth9LljoxoIYHMMbvRJCpq0Gkdod O0SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729292776; x=1729897576; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nZNBMasmzn5GJqgNrkMf2/WF4fiTfX8W77rCZ+wcT6U=; b=EKslVjlxVYcVzXGSlQWxamBgKU/WL8+9v8DkSGHjX7Mbrq8SBCvZZniS8IJkB/CqYX fu0Dps6dsGyJx1d/6aL/eLVWXiL3HJwZsInSTzQDuQYjSLb9dPjW/cqkaYnAPiMr/94M bWfjIk5vtsy4WX5jxuTjYyHh1NWfQFlRTIaOp1srEv2d65iWOrRKQ2XINGVvwD6feYeF YtrUe26zFkd4uFS6xAq137ByPE4gEfWaxHW9rg5EYN/shlkZR+k/jaY0sPss9rGFgRMb OpLAcE08/yfJ6VH6WyU47/m4ImdMzxev30fkQXJiWA3K9MFlTejwx3Fliz7/raQcfRjJ 5BxQ== X-Gm-Message-State: AOJu0YzoAJDIWJIQAeRj1F3n9s9HsFuPpkV3M1O5hVf60/TcV/newZvC Zbk2sesOsWTO1wd01+9yIJcwzQz/bLKTQFIJ06uAuHZybRwSaemOh4Jgrw== X-Received: by 2002:a17:903:4408:b0:20b:80e6:bcdf with SMTP id d9443c01a7336-20e5a7a3737mr49870855ad.23.1729292776037; Fri, 18 Oct 2024 16:06:16 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:493a:a469:ed1d:5e06]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20e5a912dafsm17809655ad.276.2024.10.18.16.06.15 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 18 Oct 2024 16:06:15 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Oct 2024 16:05:51 -0700 Message-Id: <20241018230552.80169-3-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241018230552.80169-1-koushd@gmail.com> References: <20241018230552.80169-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] scale_qsv frame crop support 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: Koushik Dutta Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Wsk9rYJR31NR The crop filter has no effect on scale_qsv: -vf crop=100:100,scale_qsv=300x300 Hardware frames (AV_PIX_FMT_FLAG_HWACCEL) are expected to use the crop_* properties, as seen in the implementation vf_crop.c. This patch is slightly different from the previously submitted patches since qsv supports frame crop via the vpp_qsv filter. If no explicit crop is detected via that filter, AVFrame.crop_* will be used instead. Removal of vpp_qsv's crop argument may be warranted. --- libavfilter/qsvvpp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index 0818ada117..05ce387bc3 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -467,6 +467,16 @@ static QSVFrame *submit_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *p else if (qsv_frame->frame->repeat_pict == 4) qsv_frame->surface.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING; + // if crop arguments are not present from the vpp_qsv filter, use the provided AVFrame + // crop_* members instead. + if (!qsv_frame->surface.Info.CropX && !qsv_frame->surface.Info.CropY + && qsv_frame->surface.Info.CropW == picref->width && qsv_frame->surface.Info.CropH == picref->height) { + qsv_frame->surface.Info.CropW = (mfxU16)((picref->width - picref->crop_right) - picref->crop_left); + qsv_frame->surface.Info.CropH = (mfxU16)((picref->height - picref->crop_bottom) - picref->crop_top); + qsv_frame->surface.Info.CropX = (mfxU16)picref->crop_left; + qsv_frame->surface.Info.CropY = (mfxU16)picref->crop_top; + } + return qsv_frame; } From patchwork Fri Oct 18 23:05:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52400 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp1496747vqi; Sat, 19 Oct 2024 05:04:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUq5kI0VgVmhUhzRzrL0e1MNZ5835r5dSbKIrgoKrl8MIlbMn6cbTmXtH7JbHHJnnw9k8NFdBm3rPr5RTgzolwv@gmail.com X-Google-Smtp-Source: AGHT+IHg86oaOGaPiSRJnzyfPOQVEFewqyRsOfHkQmo7+dOSJHYLDnZgdLVhNrCeQ8iCWKoTy/gw X-Received: by 2002:a17:907:97c5:b0:a99:f887:ec1d with SMTP id a640c23a62f3a-a9a69c98c46mr432964866b.49.1729339453897; Sat, 19 Oct 2024 05:04:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729339453; cv=none; d=google.com; s=arc-20240605; b=egD/dmLPgAnDcXhs8l40Ct4ZgChKtKHB3e1O0zyuCHM7tZO9nRUHe9i4XBuKFoBnCB 9kJzMYFoVfyQfYkwOVyjPQ4GI6gUZLvDP3GP/jl2UV029xdTg9WbujHASFYqq2up7wQR etoPrwuyYXD5nvBavv4zuzdsBVqLxCQqvjo1ZNq31XY2eh8qA1SBRdRaOwHHyDvQmNXk sfCLkxQvDhCDFmTwVbIlpsfSOs1ejveE9jbsD9uIioi2bsvjz3PZBe6IPiKITbreUpgt ai59TVjSC2hCRjOprTs3+ObMykj6QWZkKWogtuH+sNR9XrNcPrNycBjgTLMGRgNK8DnS 3xpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=ek8CMrdTByG9YNV9qkUm6XPhpSG6VZOxRdqEjHGFrbU=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=Wc9u/Jh7VA6fs5zWOO2qKz6AySJwG+vmFj4IcsTvUnURRYa9BBpsUOYpghn5XD+wVc IW6/8SJJokNTfYokuzLcIVxXRHMxg4xlzvm+OPAYJpK4j+gIh8VQIJy0HWV2NskcJrr7 QOBRl9it4MdU85s83T7q7X5Y+ciNIP2fIVAX2gGGqEcWjjBhiIY04sfqX2RkZBY3DzfO cuRaJmebVik8pR18FQE6F7j5fKWlkYppuX4LdS/1A4cw43x44sdTfRQs1hQY3+CQBDcb j6EL7V5ag5JfXLgXXcz90pajtjtTHt83ClT+qsKeYsAnNQVQifVWLP8hmYDFt49/YELC BgEA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=XxRxB578; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a9a68c2eb19si273692866b.859.2024.10.19.05.04.13; Sat, 19 Oct 2024 05:04:13 -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=@gmail.com header.s=20230601 header.b=XxRxB578; 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=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F196A68DD13; Sat, 19 Oct 2024 02:06:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 23FDD68CFAC for ; Sat, 19 Oct 2024 02:06:19 +0300 (EEST) Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-20ca1b6a80aso24730525ad.2 for ; Fri, 18 Oct 2024 16:06:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729292777; x=1729897577; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tLX3NcsYb0A33iCjoZPvS64xhFu6/rQH4+cKWhKhkUo=; b=XxRxB5780YiEqyFtgXnYk0NX0LXOC9a47pUJTJsZwxDWpkO+JI9uTn4nCVVvqSgx1Z Ar78ba4CmIDbkje3HoXNecTk41M7uV9T72RZk2EyW2XbZ76VJXQd7ZUz9ny5s/F3EUwl YouK9rZUZImNIpb483j5uqeo5Vy/iNKjk7jZkkwqvxrhOj4nyrgGzelBYtfTQLeKSq5X jLMLaHQ50GUg3sfmd9lYrJNrpOB31uc5Ki1YgJ03fxkhlzZdMQHwA4Yi4Nq7JwX8L8si ijMGQ4TWMRIe6tR7YOKaRyhY4RScD/q284qLFs5CsRGZZjHVGCaxa8Kas9tbOJdUmq90 lytA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729292777; x=1729897577; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tLX3NcsYb0A33iCjoZPvS64xhFu6/rQH4+cKWhKhkUo=; b=POjRiJilzkuF4cgYgyL/Xg5PtnuW7cPMOT9ueDnXNE/o1e6wrHDk54blwn2heA5tuc afAbFvMuVu1SwSitV6ue9NM303ckqrGzFbUXapRxQ3/mTPJJ9ysenaeGGrCWmurySkwb T3KoBxxnUhjwdlCdiFymoZx5Tq5kwTJHHGXKu+XmhyZre1/CVhL7E/D6O5M+YLBwd2Vh CCrQRzp5n2dsAHiBg4DhPZlLdM5e2nngqnYX64sHToDSCsK6Mc1xsGWeLtVARdC87bwS NR7LUp3HWH6kijCyD/6NZ9KrfWs8sXr/zq/1YdFnDChseeRpSoe0VjYxbgGlmYZwZJEq jTDQ== X-Gm-Message-State: AOJu0Yyt3U0PwktTmDUCR0/4xBYSILZr4KKEAPjpgb86BDWyYIioTMLi KXY6gCx3LPcTh5UxwgjopDceGg7JdGplkT3lzG46VF34mvp/jxMDQ+yDTA== X-Received: by 2002:a17:903:94e:b0:20c:62e1:6361 with SMTP id d9443c01a7336-20e5a8a3e9cmr58954385ad.25.1729292777046; Fri, 18 Oct 2024 16:06:17 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:493a:a469:ed1d:5e06]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20e5a912dafsm17809655ad.276.2024.10.18.16.06.16 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 18 Oct 2024 16:06:16 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Oct 2024 16:05:52 -0700 Message-Id: <20241018230552.80169-4-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241018230552.80169-1-koushd@gmail.com> References: <20241018230552.80169-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] scale_vt implementation for negative width/height sizing 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: Koushik Dutta Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nyoMajY3zFTA --- libavfilter/vf_scale_vt.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libavfilter/vf_scale_vt.c b/libavfilter/vf_scale_vt.c index 3da46a6cd5..3785b884d9 100644 --- a/libavfilter/vf_scale_vt.c +++ b/libavfilter/vf_scale_vt.c @@ -33,8 +33,6 @@ typedef struct ScaleVtContext { AVClass *class; VTPixelTransferSessionRef transfer; - int output_width; - int output_height; char *w_expr; char *h_expr; @@ -232,15 +230,18 @@ static int scale_vt_config_output(AVFilterLink *outlink) FilterLink *inl = ff_filter_link(inlink); AVHWFramesContext *hw_frame_ctx_in; AVHWFramesContext *hw_frame_ctx_out; + int w, h; err = ff_scale_eval_dimensions(s, s->w_expr, s->h_expr, inlink, outlink, - &s->output_width, - &s->output_height); + &w, + &h); if (err < 0) return err; - outlink->w = s->output_width; - outlink->h = s->output_height; + ff_scale_adjust_dimensions(inlink, &w, &h, 0, 1); + + outlink->w = w; + outlink->h = h; if (inlink->sample_aspect_ratio.num) { AVRational r = {outlink->h * inlink->w, outlink->w * inlink->h};