From patchwork Sat Oct 5 19:23:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 52068 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:938f:0:b0:48e:c0f8:d0de with SMTP id z15csp1133580vqg; Sat, 5 Oct 2024 12:34:12 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVFz0UWrm4RBbEoMD39pild2chKoC0H5ihshbpA0Y7jF0Fr2dMc62p2DMANHQ31Y3d3fZPA6PeHhQDaPNotXIF9@gmail.com X-Google-Smtp-Source: AGHT+IGxMBeIIs4V0hjeLqY/F74s6z8fivlWJ1WHLFndV1omCsdSS/JA1/W2kbrqdto1bFKXGpiK X-Received: by 2002:a17:907:e21b:b0:a8d:5288:f48d with SMTP id a640c23a62f3a-a991bd460f9mr662260166b.32.1728156852060; Sat, 05 Oct 2024 12:34:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1728156852; cv=none; d=google.com; s=arc-20240605; b=grFvPitUikwDA2dY/5+hnBSMo0+wLdMysVSkI0pmFtQ2I/Ga/OtA6UUmVJ8xY1aceC JX4G8PWX/wtOFCfqSrlQPklEMB8uZBLdNoIiB57nSDZUNmSTy84fj/T9JhK6bMRyJfmg mSFA7fXMe8HuYJj4g+9RtKGS0h1IzUPjJwjEypKva32CNh3eXWcTMlT5Fw4Ai+SeNrDK iFesHVBHUdYxaMzRpgK+9yEpmdfOKMN/WeaD0/xk1VaSJO/98GA41VlhaDL/E3es1SwP nkV+xdTnkFt4l0YFjCHP0P2UHsVnS85KrtLb3xoqWmCtWIfPOpiorRoS1IdzVl5GOtoV QFCg== 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=YRlc2pKqDzZ4ZXxkME96T7eLemqWGSnosBBSDhd/TEU=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=bRpxM1xdx76gIfJvE8+1JhTOMwhb5TCayMsNmhugCNLP6wF9lWxfETfpBYL+hOsbad v/WBpU9iN2wJ3U8IVSmlvt+jqCWelrMqv0SGkYfRNiblbJJ4QCobkON9Ktr37aNyVBxy 3cJeZudS1UC6Xzx19xDF4rEvnEdYIzjnC0lQM3nGuJPpN+4vjJSAhH3ukbvVqzwIHp7a t+fsPshqMC9/tRHpD7ZMeWH2jsr3kogbGRyS26L1cQOOEKF5ncvsGne4OnOxGU0gqJ44 vSKzLIm4i93Tn7Q18WSARjRHwpgjd/9ZPWRSeesGmW27OXkeTowWYC5p5jb9+NeFgWUc faqQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=KRsHSLba; 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-a99416da407si85071866b.519.2024.10.05.12.34.11; Sat, 05 Oct 2024 12:34:12 -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=@haasn.xyz header.s=mail header.b=KRsHSLba; 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 DF1F168DAF2; Sat, 5 Oct 2024 22:24:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2558168DA58 for ; Sat, 5 Oct 2024 22:24:18 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1728156253; bh=nAnIjkFpozvphKu4Of5zRBjZC7Oy4ing5/7H1IKUmlE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KRsHSLbaIKcgEqWBn+EJa4Boqip6+MX0nrxu640MM0iKLhLwSE+L7RS4EFpzk/E1i 0ZBs/J8tW0gBlmt+PhG1t4F7sD45Cw4AbB/kJ+ikTen8VlqU/GBdVQM3cHzHY7WKuv X4kUCbywKKPrjcUNRzTQ6zxjEhzhYghpgGh7/N8A= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A1603436B4; Sat, 5 Oct 2024 21:24:13 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Oct 2024 21:23:57 +0200 Message-ID: <20241005192403.2450339-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20241005192403.2450339-1-ffmpeg@haasn.xyz> References: <20241005192403.2450339-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/12] swscale/internal: expose low level swscale() internally 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: RmuzxpdzbY6k From: Niklas Haas And give it const parameters while we're at it, because this function does not mutate its parameters. Used as an intermediate entry point for the new swscale context. Sponsored-by: Sovereign Tech Fund Signed-off-by: Niklas Haas --- libswscale/slice.c | 3 ++- libswscale/swscale.c | 11 +++++------ libswscale/swscale_internal.h | 8 +++++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libswscale/slice.c b/libswscale/slice.c index 1cc3f6c405..119bfbdb8d 100644 --- a/libswscale/slice.c +++ b/libswscale/slice.c @@ -145,7 +145,8 @@ int ff_rotate_slice(SwsSlice *s, int lum, int chr) return 0; } -int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative) +int ff_init_slice_from_src(SwsSlice * s, uint8_t *const src[4], const int stride[4], + int srcW, int lumY, int lumH, int chrY, int chrH, int relative) { int i = 0; diff --git a/libswscale/swscale.c b/libswscale/swscale.c index b9ec976be0..4ba35a61e1 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -233,10 +233,9 @@ static void lumRangeFromJpeg16_c(int16_t *_dst, int width) if (DEBUG_SWSCALE_BUFFERS) \ av_log(c, AV_LOG_DEBUG, __VA_ARGS__) -static int swscale(SwsContext *c, const uint8_t *src[], - int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *dst[], int dstStride[], - int dstSliceY, int dstSliceH) +int ff_swscale(SwsContext *c, const uint8_t *src[], int srcStride[], + int srcSliceY, int srcSliceH, uint8_t *dst[], + const int dstStride[], int dstSliceY, int dstSliceH) { const int scale_dst = dstSliceY > 0 || dstSliceH < c->dstH; @@ -1053,8 +1052,8 @@ static int scale_internal(SwsContext *c, if (scale_dst) dst2[0] += dstSliceY * dstStride2[0]; } else { - ret = swscale(c, src2, srcStride2, srcSliceY_internal, srcSliceH, - dst2, dstStride2, dstSliceY, dstSliceH); + ret = ff_swscale(c, src2, srcStride2, srcSliceY_internal, srcSliceH, + dst2, dstStride2, dstSliceY, dstSliceH); } if (c->dstXYZ && !(c->srcXYZ && c->srcW==c->dstW && c->srcH==c->dstH)) { diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h index 17440c99c4..33f9404b34 100644 --- a/libswscale/swscale_internal.h +++ b/libswscale/swscale_internal.h @@ -1100,7 +1100,8 @@ typedef struct SwsFilterDescriptor // warp input lines in the form (src + width*i + j) to slice format (line[i][j]) // relative=true means first line src[x][0] otherwise first line is src[x][lum/crh Y] -int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative); +int ff_init_slice_from_src(SwsSlice * s, uint8_t *const src[4], const int stride[4], + int srcW, int lumY, int lumH, int chrY, int chrH, int relative); // Initialize scaler filter descriptor chain int ff_init_filters(SwsContext *c); @@ -1144,6 +1145,11 @@ void ff_init_vscale_pfn(SwsContext *c, yuv2planar1_fn yuv2plane1, yuv2planarX_fn void ff_sws_slice_worker(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads); +int ff_swscale(SwsContext *c, const uint8_t *src[], int srcStride[], + int srcSliceY, int srcSliceH, uint8_t *dst[], + const int dstStride[], int dstSliceY, int dstSliceH); + + //number of extra lines to process #define MAX_LINES_AHEAD 4