From patchwork Sun Oct 20 05:58:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52403 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2011095vqi; Sun, 20 Oct 2024 05:02:56 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXH+3OC+s7u+1gMjh9RghNxQABhHoGu5FkrUK4PZ2e8HvOGn9Ra3qQEIlTgGZZBr/sgT5SKlVvsyotUYRrZPXsj@gmail.com X-Google-Smtp-Source: AGHT+IGXZDWdI/N8z7x31xaJfS79nAzw99I7RWo8LpPpeJgc3BbP/yTogureOFVq9Lbu5R663FtJ X-Received: by 2002:a05:6512:3b98:b0:52b:de5b:1b30 with SMTP id 2adb3069b0e04-53a15449538mr4465144e87.44.1729425776519; Sun, 20 Oct 2024 05:02:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729425776; cv=none; d=google.com; s=arc-20240605; b=LchQtUuhzPcS2h9U3E99oj0nQFnUG6dKJp9NzVhr2tVJBdUbbTY/5L6MoXS3NKmW4U DkXtid7lbyFCsmFl2HFY65tYWS7c1+o5fF8ta00HXv1JcNt6xRM0uSy4B7PgkVnLIsY6 lIciYS1aI7mWoNHZND3sh37guOaqMALLQv1/KKdFQ7Hu6rRnRdwnzGeSmklJ65juhx84 O6mugCqsiLAohFGsSwMMMk2yg9W8ySNAYuAW+ZgWhmv178UC3sREX+9Q9/Jsjr/ydFt/ 5BvOygxXamjkBLD93XaZOVy1s6so9rIlnGEboct3gGrAXx0epD74z9ZC23CfrTrFP9oU tjHQ== 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=+FiIhn7uU25M4I5uu6czChDgFXGDWcV8qDngJesbQrQ=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=AvbiuX1Q35leTgntsw5GSpgH/G38L58d1kZJT9XjFq5pwDQOfpsS87SeKHj4SUwnuc ifoorB4/BpcL7ArOLtzhlWrU/XZrGPikseVlNzm+kSNLab1krPt28V5zMGF6vSY0KE5R JKDhMLYjdbEzI2kCy3RNzN1E3HagHy6ze++f7bc7pikwrXV15bSoh8pKZT5irBwmmUcU tLuvg+S2v/8AVof/eiDxIUhB71muFiWI5+tdYXnY9QuAQ3aLMQv2QuvLD4a4A8Yt9i9E QMvGmp61itfVPxgwFiNWfnB9NL0cC+0QaSxXjit9Qb7clwUgjKsxpMpenDKk42CITvhI 25Pg==; 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=jRBiKeN1; 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 2adb3069b0e04-53a223ec25fsi444147e87.16.2024.10.20.05.02.56; Sun, 20 Oct 2024 05:02:56 -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=jRBiKeN1; 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 55A9868DB03; Sun, 20 Oct 2024 15:02:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86CB368D9B9 for ; Sun, 20 Oct 2024 15:02:46 +0300 (EEST) Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2e2e6a1042dso2909338a91.2 for ; Sun, 20 Oct 2024 05:02:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729425765; x=1730030565; 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=Lr6ltoIF6qg+pIfjZ0787S4YLIYVVmhrRz35xRvCN/A=; b=jRBiKeN1w577lZMz0L8Pab1qNa8QsUIGCNOmgAOaeiBE8+fdJW3+Q3kxlmH810G2Um PQIMUm4xxXQD7sk0BVfLOChrNXapmrcM0bWj4ZwOwq9rwaArweB/i8w0rNnngQg7MzUt LgVl2cCUbr5dZRUcmpzY2AAhm8AiYptP5fJmWpyXKnWhbgyVx45KdL7ZZ2gatl9rR4IO xSSCy5OVoDoezvc8oIFMM6eOQJNKcWqw+X5MJrNOZYSswgWSBzhv7kimnaGrBEU5+JNd RV+8G130uAlr6c2PTukBADv+T+/yo1u8dTYFjSECYYMAYoIcd0JNjdlqe7vx2s691IDy BXrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729425765; x=1730030565; 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=Lr6ltoIF6qg+pIfjZ0787S4YLIYVVmhrRz35xRvCN/A=; b=FKMGsqd76sCEi4vZUcZ5dUJQ9Qsl3XUgEQaqsHmPoE0mU8r2SXZ8bavd4PbjZtm+Y/ aBa5rJP666USxni9+azqZx90Mzh3JeMbU+WDz2OiRqc7yVr3XV4PrKm707f5l2eoZpzC SoL7LgkF+jEktOKY7y8Co8M6QrVGTIaxgzEF3aqGhr8r7J2+Q5XVMfVryhmAcTJ/2glh pBrUtGjeAkFyytEMVJ1SKt4ZWK6adYZG93woDpISDc5GyGiPM8rz9GiwnXg0+9iCxthr 5xdEZgq+4Q+3XtVO56WNjXRebDqu3ysZZv7zLxxqPufJgY0/DKjB14pRSRDcnn23b544 37lA== X-Gm-Message-State: AOJu0YwypkIVWezXTa2DYkoCdwYMvp2gvW7Kr6Rd4A1jc8Fqh4ogkiXD IgjTV32NyPV/NjB9EtTz1H3aQE69wBLZPQ3Q2g6Kyoj3B41vBHMc+/R3Mg== X-Received: by 2002:a05:6a00:1741:b0:71d:f7ea:89f6 with SMTP id d2e1a72fcca58-71ea32eb202mr9594638b3a.18.1729403931571; Sat, 19 Oct 2024 22:58:51 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:dd25:f71c:c57:e92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ec1407f63sm608169b3a.204.2024.10.19.22.58.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 19 Oct 2024 22:58:51 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Oct 2024 22:58:43 -0700 Message-Id: <20241020055846.85936-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] avfilter/scale_vt: implement frame crop 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: cieiaOB2/cU6 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. Signed-off-by: Koushik Dutta --- 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 Sun Oct 20 05:58:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52406 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2038806vqi; Sun, 20 Oct 2024 05:59:03 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW8QuiFifrO1HyFhn4jOK1FqtB+s02ALK2+IpkQGQpjOTNNE2+S/pXfvHnvUBzLnDCAHcg+4nPrnzG8/QlD4C4k@gmail.com X-Google-Smtp-Source: AGHT+IGujOpx70LcpqC7Fm1tF5HYcqvkh8d5enAuxquvEY19atruTvnMwKwm1QNZ1BGD65l1CYrh X-Received: by 2002:a05:651c:502:b0:2fb:4951:18a with SMTP id 38308e7fff4ca-2fb8320cdfbmr33798601fa.37.1729429142739; Sun, 20 Oct 2024 05:59:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729429142; cv=none; d=google.com; s=arc-20240605; b=LkVwbIi+3q/hakDJ/+3qKsj7mOGzN6yGU5lShNwES4FGqnQXh1HsxD84qqbMXUVlmd 91e3FeV5R+zwGUy37kRVsc9lmOBcTVP5FZPMy1gdlW4JzeLy7hKgndSI8xi5nJXEXlFC /2zvsh0z1mirvxt4G8XthalsuCMHwuVeKQ2tIhxwBS5hrF2rzpMizDvFkP6DKStV+dZY 2y3x3yg6tnmwM0wu2aycKQ0pocH5s/8nNKWTMbh33KLvq/eEXgTPtuHDUxL83zrvyyyC uskpyro2ob1Lz91VdYESZgcmdKy3RKfkPQl6LJiNwQU/GDENdddKo9Ko/id3TrQTaTYr chGg== 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=k9LzfANnoxEhnbZd1tAK/VroKzHhGJR/E3D0I5+6Obs=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=LqVpKyBEN0AZgc0Idhl1vWPrqtD1woLjxqCYE7GwSsn+Bb2qGIDmlciqLoe4egOTbh jCDReuGz4zsCE74j1g2vfqPAL4dy8rEBh8a/ucTkF7mV/HVY0lpjgvW8sZTbMEI8NlLl FsLROTsUe79dzfErg6T4Woaz1DuQIFLT+Vm97U7EN6wEKZ/UG5NB3e05cIua+eLPoXYS kw9H2orDgY2yYVBT9p76wZNR2SF3w8QZzP45vPYAZpm7oEk5ZUJprNxFFy1CBdGt6Ck+ QUZbwar9ZQjFlA4+cdIm9YIUhiFDuekjzxj5OWWMr2UXUuv+XqdZkLIf+Gg4gxDgenTF tRhw==; 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=Z6hocKZ9; 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-2fb9ae7d607si4616501fa.404.2024.10.20.05.59.02; Sun, 20 Oct 2024 05:59:02 -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=Z6hocKZ9; 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 1560B68DBA8; Sun, 20 Oct 2024 15:43:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ADCAA68DA38 for ; Sun, 20 Oct 2024 15:42:40 +0300 (EEST) Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3e602a73ba1so1151107b6e.2 for ; Sun, 20 Oct 2024 05:42:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729428159; x=1730032959; 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=oHM9L3gwigsOIVDf4Q/x/oyLHrU8mwaP6yegEkd1aFE=; b=Z6hocKZ90362fe3tftjf2M31rkzXumoTuFVQawbWBBlAzvI5eclQpIrAYkH0tG5D8q 7iwrtGM2ZDQ0UifQjIiWsCDNaGN7Ivw7Ze3Se+Ssp4mmgIXnMZfnwc2AgFg4Cfu6vxB6 Nw5xRzy5aKw6HFK52ppFwQTXW5t43Yu2tqkyk52fPbdk9tKY2PTT4btpPPdYB/eoKbTU 9bbSjW3EyHb3nZoaW1vio3922SCqXzI0RTB5DGnXKjXko8gtempSLlk0HykB6qpiaCGG P595QADdO6Nw8a9wp9JkkNzEbFpZ2VFZLTnCpOXR27ZpcpmNGNUl/LkNEaWClPrHjK/w OOzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729428159; x=1730032959; 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=oHM9L3gwigsOIVDf4Q/x/oyLHrU8mwaP6yegEkd1aFE=; b=XVpYV3m6vuzpL6Gdu4s4JT5I4qYtx5NtBEJWe3cLU4pmTLHQ88Qm5XuMjjB44KzGiY PJ2HI+284mumJZx1t8G1EUTUDGpDI4tdXQB8gKWLUjMZuba87Y5Zjxj5WhD8PWLhw3hj NNz80ddvVUKhUWMDMh9eIO7bhN7nyZ2lbfyU0ql84b98BqtC9onrmZGjkPDsFjCe1LEF UZ4UUjFcgqLw8Wn4BHydoEM9w/ca/tPNqfef8UDBvyfUTGzfpNE5HIxtsAZuLIUiC7ST euSpjxV526qlso7jAWaw59vEYjtndjPB6Ab4PidWjuqz8VxeLg2Aqrqq01SNqHTuCPDI f9ug== X-Gm-Message-State: AOJu0Yxb+o1nQ1LiNZkiUr4hGQYXdfGyackiNGlfwRj+ZSuhlo4a/Oez IrrKpxShW42Wsi1ZYDLoXuagJ8nXgZkHlMvwoKa6N6W93xjKiHkFV2AMXA== X-Received: by 2002:a05:6a21:1349:b0:1d9:16a7:c3a9 with SMTP id adf61e73a8af0-1d92c5757f4mr9985853637.32.1729403932090; Sat, 19 Oct 2024 22:58:52 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:dd25:f71c:c57:e92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ec1407f63sm608169b3a.204.2024.10.19.22.58.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 19 Oct 2024 22:58:51 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Oct 2024 22:58:44 -0700 Message-Id: <20241020055846.85936-2-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241020055846.85936-1-koushd@gmail.com> References: <20241020055846.85936-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] avfilter/scale_cuda: implement frame crop 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: XGr1LRa4Hkbq 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. Signed-off-by: Koushik Dutta --- libavfilter/vf_scale_cuda.c | 15 ++++++++++----- libavfilter/vf_scale_cuda.cu | 22 ++++++++++++++-------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/libavfilter/vf_scale_cuda.c b/libavfilter/vf_scale_cuda.c index 54a340949d..eb8beee771 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), 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 Sun Oct 20 05:58:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52407 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2126915vqi; Sun, 20 Oct 2024 08:39:03 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU+KdUGgDBRW5mOHQFxmqumsIcO8xm2OBn6W7m+2qzxcxD/ZjtZOGoWp3/tFqGlnW3YH/FA3hDYccjN0D3s+1zc@gmail.com X-Google-Smtp-Source: AGHT+IH3dRVp4q3op+AM16iJriw+23e6cw+6wrmNHhmcxzx1BRpfswjtee82h1N6GKyuUqKBetdY X-Received: by 2002:a05:6512:318e:b0:533:d3e:16fe with SMTP id 2adb3069b0e04-53a154f9025mr3777002e87.38.1729438743228; Sun, 20 Oct 2024 08:39:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729438743; cv=none; d=google.com; s=arc-20240605; b=jqP9G1f75tm5DCJVbvbeRWq3x4WcR5X6MHJ5j6NX1NdR7AgTuZx/e6RK31c0amHCDQ 9bC9eFdaZb9gYJ7fXyEUNCE13vRYeXbQEoK8EE3lD1Iqk293xj0tuiYOv0tZnxGrNF93 Hz4PVnVnWg8UZIW9wClVMOH1SFlZeVxwj2oDG+LzZVIuERuMh8QC/TlUtI+4XjxcUYgp 46XPSgP4ya/LCZEcuzGBLkJM9EsjY+d7cQMIDl3Gnz+X5qTArEwP7GOKWKuBwaVWUys4 kZ7s5vLCRg/hmErcvGnDVmrFSXQKHaqUYU1THqO81XgwAZAmosPHKy1z/c1ShetxjLM7 8/9Q== 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=I0gIn8IIPc55hi3VahSJZFHrdg1hPabHyArDibve5xY=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=A8Die4hFXSkEUlhap9d62AnBvg+le8tvS3pXGlVCeH+0hVGxycsmrqzTKO+IwVvoHP jL4rktkgRGyAQZrD3W6H24fxTHrVF8smvg3x1dguwzEB9T97s5pTJiHOF1nYULIZ4Q8Q 6csJhZiR3Fvhu68haWaVlyR4NBmQCZSMBrzk5GVd92laMVoKYPaNHjj5+uecbxrKf5hm AorvMpqH7dhjRlapsgMk4u0zh0S0yDi+2mT0uoGdCP1WpFW4uTmI0YanPFAPkQ1JarL+ NwzTmigujaZOqR6KVD/eAeDikPY2p3yXHtA/rLmAy1JxYbeg3ljVTxuCvurKn/E9jBeK NuRg==; 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=h63wWleH; 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 2adb3069b0e04-53a2245a610si580909e87.635.2024.10.20.08.39.02; Sun, 20 Oct 2024 08:39:03 -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=h63wWleH; 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 95D5C68DB42; Sun, 20 Oct 2024 15:03:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb1-f173.google.com (mail-yb1-f173.google.com [209.85.219.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D819168DB2F for ; Sun, 20 Oct 2024 15:03:10 +0300 (EEST) Received: by mail-yb1-f173.google.com with SMTP id 3f1490d57ef6-e29687f4cc6so3429883276.2 for ; Sun, 20 Oct 2024 05:03:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729425789; x=1730030589; 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=zjI3busSdr98vL6ungiHjp1ug4wyeDa7C4OL8Uzzoj0=; b=h63wWleHOFHh6S6S+qFTJgKhOmp6AzHYZkxpNz25v8z02PDiLzEmTRP7M/16zlue57 fuXtSdp02eQSvVJF6tMK8fFxCSnzDhWT1XGV17vWHKcPzuVsl8RJCyW6c9cuNoL5PScH gjojF1TnaMo+yIRnROT60+kh/dskVl4vwViME/u3NeTVZx9iYJNyPHY3Lcz6KZHyXKHu rcsw39NcXUaHY/s9jCNwhdBPgEQCpOuuXbPp+c4eFKJOnt61qfxidGzV2o73rHq+YZi/ U9IHVikXT4N3rC+MlXm76FssEWN0Ltih0iNdGMjTM7Wo+N5pX+FT31HfueOBKHs77XfH eayw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729425789; x=1730030589; 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=zjI3busSdr98vL6ungiHjp1ug4wyeDa7C4OL8Uzzoj0=; b=xI50O1gmLX3dfJcsziYXH8aeUO/l2IHxAAVePZKWC8v+IvdUEOM2VM6zWvFuCRsyjm YQQ5voinZYssIxHhyf0N4CBs5Na/0Zvfkk69aU4ewSISgbNn0Dkw1WXxwTXyCH01FOXD 8cWF5LFTgsZAAIQ+hPPasu+ADTPT3xzpfDus1ApYKq/gOIgyUpr4LVDV0lrcaFrVIUCz YIJIANp+4mtR8qtdssnRflhsc0wEbeZE2P7VIG4QyDvC7t67zaVEtRcStBK2oYzzl3hc XIuRjo4rSZqxPBP/lehjG83eCmfhTVWRHZt8Gr0olTOFyKQLHXRftDhnEPokVZDG7hg0 zknw== X-Gm-Message-State: AOJu0YxTcZtjM4Uoizt7CwnAquo2AE1jREPwNJTYPQWwxknc7eYP5Ky8 Ovgcf2ppcPuBxCpRdK1UHdyr1+lWpBwyNPMKqbmV+bTMMispA3MLRHnujw== X-Received: by 2002:a05:6a21:3a94:b0:1d9:21c7:5af7 with SMTP id adf61e73a8af0-1d92c4e0698mr11269943637.15.1729403932656; Sat, 19 Oct 2024 22:58:52 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:dd25:f71c:c57:e92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ec1407f63sm608169b3a.204.2024.10.19.22.58.52 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 19 Oct 2024 22:58:52 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Oct 2024 22:58:45 -0700 Message-Id: <20241020055846.85936-3-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241020055846.85936-1-koushd@gmail.com> References: <20241020055846.85936-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] avfilter/scale_qsv: implement frame crop 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: I1kvHRDSLfJx 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. Signed-off-by: Koushik Dutta --- 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 Sun Oct 20 05:58:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koushik Dutta X-Patchwork-Id: 52404 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2011806vqi; Sun, 20 Oct 2024 05:04:02 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUvj73mVlhXkqhLKUXWGNMEnRBLZpKxLr785/DPGXMx8yJUmfsm8CFwqJ5aSbM86cJxAfIJxUNK5A7JdeFpDIUq@gmail.com X-Google-Smtp-Source: AGHT+IHF75latg05LgryUhNvhbvERlIgO44qrmEbySW28jPkqchTKAXMYTrdHuMDX3LyEdkjxFUd X-Received: by 2002:a17:907:2da1:b0:a9a:47a:8908 with SMTP id a640c23a62f3a-a9a69969784mr806014266b.9.1729425842185; Sun, 20 Oct 2024 05:04:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729425842; cv=none; d=google.com; s=arc-20240605; b=e40vSSaKEpnyxtQ/DIa2DFnqlTkRPcA4k3781kLswy3embb15W942fLx0S/+Zu9C1N xR9JPosvxTeDQKE9fs/9UPBrXNK+wakEaIYNprUMwHD95ItOj9LBE0d/2PwgMD8ugecQ BK3w8CA2eaN0cv/PaZkRZbZed3ql0gABlYYEt3SCMqDwt3m6XkErMm8V64fmdAGg+FR6 fEeaZUbNP3WiBBzuD3HzXaj3OLlgThrtkGH5OiZXzScc/P6ZWWw2ZWTMgjAswjr0xj/1 zT/axA40zRD2M4TVXVIniPgJxGGtSBX9sFAa4OIMxg+MFqvSuy55oBysFvBIIaEfzF7/ np0g== 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=4tYDXSz8mmt3dOTTKjnzB8oaw54fuakhc5WYcjvEKdY=; fh=vf1rgm8KpEMxcRKiIfYPC5TR7MMWdHSIxg51vjgwMpE=; b=JQqHKNPQRiFtnr1jcIBAt7vTzKFv1tVBRhjpL6ldOTXKeOe75D9Q+87Xdq9KgKXWXB kVunrSfdravx49tN/FYLBRalfj2RPdAaVCYvmXOoZPHkBb52c4+2Z3yJB7vJgiTpFQ7S 9QowDoN9TPQAqqxcGdWy0+s5a3KJO3NmiWXYKVGy7qJL03ouVHvhmbsmdE/woFUcElJ4 CokrFzMQ7DE2UF98/UBZewiQzJAnn5sYgJkCrpEpZ5iOY6tvHyWPtd/sbBJ/tV32azqx XtcAE36fvnmlLWf6LgwXp/B+pNeMjeblyWzML2/ab+uKfHVD/8w2jpvTL6XL5ZPpIx+R aqeQ==; 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=KrMSg5q6; 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-a9a9134b467si104120666b.597.2024.10.20.05.04.01; Sun, 20 Oct 2024 05:04:02 -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=KrMSg5q6; 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 72F1E68DA9F; Sun, 20 Oct 2024 14:53:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8C8AD68D9E8 for ; Sun, 20 Oct 2024 14:53:33 +0300 (EEST) Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-5e7ae4c504fso1551634eaf.1 for ; Sun, 20 Oct 2024 04:53:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729425212; x=1730030012; 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=p0jKIeQoQZgJ/QJT7tBpCPuNt/Zq40ZG+ESUs/dkfAk=; b=KrMSg5q6FMYmQ+MFvrkfGw0HT1NcUGGGNnXv5b2bDQBf6xS3eHjGQpAtyBCTnbQ1OU /TPMJRyiEZrUJ7DyXlo/s0SdNVzj/uXHPXCJ1Dcow/lnE7rEJIxLey5+WiHjlMApbqsx /97XDfQix9qewh+/Glx+/9vra7PO0vZUG1tKkn74fOfC3UWqMnajnlyuGK5utJldtyu5 uuXm6kvOBNVgxaR5SuAjFxWaLLak7tnOqIl7UYXifnwL75TIjnEmR2u0Dr/SPim84hdf hWWX83c5vfETXk8eclR89RSSODHcXHxPexlggpxah6s9crK1Dov+75ZXE84BgeqX26YV XXOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729425212; x=1730030012; 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=p0jKIeQoQZgJ/QJT7tBpCPuNt/Zq40ZG+ESUs/dkfAk=; b=SZZqXnXvk0wVdQFxV+JlZYek/X/lf1l+X5s8YadAJ605hSRDIO5ysl47jxY/C4pHR0 G5tnmR4ax4h5fQsz+jfFfR5M5taYHi1pokCd8q1QddUXB9ZUYf2HIfBkY5FBX0yT47Fo C8BOx1zR9b/CTOCvYxSskbsyn8+HhotZOn49BWbrIaPAU7h5YBw0s9CuxZKkRDTkxD03 8oiVXaE8BsH9ywK1OTkmz4UOIER23UWFt41T2aEVD3o/DuLFLCyC6tByMDnmsNSh0eJz Zsy0mQLY3pxuaK7ZN3LtK7xP/o6cv+ZmIu+09jKFNJIV5O2oHs2E3U9wFvdZ/CBcxCFm Yx8Q== X-Gm-Message-State: AOJu0YwYVHPRJ71L8SyDJqqhveU89P3saOkHOa+xPhPj6yOPg5j0dBXK jRQuWAb+oiObsajO2Prdii9LOMHgfgnz1lLp32Agr8bmdJiCi+oetbAenA== X-Received: by 2002:a05:6300:668a:b0:1d9:2b66:3323 with SMTP id adf61e73a8af0-1d92c4df9d7mr9858400637.15.1729403933185; Sat, 19 Oct 2024 22:58:53 -0700 (PDT) Received: from Koushik-MacStudio.tail05204.ts.net ([2001:559:76c:0:dd25:f71c:c57:e92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ec1407f63sm608169b3a.204.2024.10.19.22.58.52 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 19 Oct 2024 22:58:52 -0700 (PDT) From: Koushik Dutta To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Oct 2024 22:58:46 -0700 Message-Id: <20241020055846.85936-4-koushd@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20241020055846.85936-1-koushd@gmail.com> References: <20241020055846.85936-1-koushd@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] avfilter/scale_vt: implement negative width/height aspect ratio 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: AzEDdI0iVNuz Signed-off-by: Koushik Dutta --- 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};