From patchwork Fri Feb 9 09:59:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Connor Worley X-Patchwork-Id: 46127 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:a586:b0:19e:8a94:b663 with SMTP id gd6csp823287pzc; Fri, 9 Feb 2024 01:59:51 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWdbwkGLEg98RquLMgAkcbQOfzVuC9jXbNflej0beYNQ5SRW7cmG+YRz8maYlYAbLYYP0Il0dpoENs908Odm1B6oGGNb3iPNQHF4Q== X-Google-Smtp-Source: AGHT+IGYP5ftSxeTw6V53clymf7vZ919nS52k/2IUWnSbYHrXcMKs3A2WB3c0NsTurgt7xAktT+8 X-Received: by 2002:a17:907:7817:b0:a38:9a8b:1894 with SMTP id la23-20020a170907781700b00a389a8b1894mr644791ejc.2.1707472790710; Fri, 09 Feb 2024 01:59:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707472790; cv=none; d=google.com; s=arc-20160816; b=M9o0Ga3Ch18UzPW5C2XKUS02RCW2uvrUxINiGQuEzqN1E9/hB5nKhbr/+LueWHcNGb L43yt+HVUkyoAd2M/dErnr5SupONVH0Z4Vk3WzZymT1/CRbOSK69cvHp5OILfc3P9lSy NsmgrSym2sXoI4gz7zfrDNI00qGbNFMgG4kn4/bHDlD96Mo861wrMp+pcI5u850jh/9p zQXxZTPiwkFeScViYHEgOIUsU+7yRs0XKXecb2dlpHxBcQGwBalik3NzOUYCQiaJ4kIP cpsiUANHYO8xhp73FW6C4d40doYHABsV7iHOliPA4A/Qz90N9vv7YIGaDTDsAyzWZjwt Ir8w== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=0hWQM7/MciZLp5XbkO/6rWtX/uHWyOKZyy8Eo1GhPBc=; fh=vNxzw1pxHf8kTuNW5mQayQEeFlsdpV0uRw568mw1lSM=; b=L5qLFKSZSNGdr56jSWyc2aUh5Dh4A+5yvPz4d3BxExouruCRynmPWfepyVhRy1qj/w K+NDzUWJ/qhhQxInZCGpNgcd2VtD5XW9ptYefF/6T1zGD0Y6wESMYuA19J5ZZEbum6Dw u/AU3jqhsgqhsAh11Q6ZUEtCnJee1yNfX8ZK0TT9nfMmVa54UpXngATsfcI3qOH+bZGa kEK9p0TH3GMoZPGDj/wCXKNsY97JXAaMMEKucN06PVBPiU6flUsCCuX0B9j/wI09GVcA IeoDpN0eTge3a1DpWpGvCZSnuRFPZVgD3wSRMfkJqCqrmJMeyYRYRVjxIlyd6XPUxp7F mTNA==; 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=LvfLQJUm; 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 X-Forwarded-Encrypted: i=1; AJvYcCUvTSLiYU3hKet45Jl94agZ5R8XT0kd20z6MXYyWu6iJ8hALKT47hyZYhDCf1ouNRZTaelB3R3W8izUVkebKbUrODpvhlfBNBxV7L1ORpK55RFFMpwmEeoNmlCN2yKtaD812XbH0z5gMjXtuB/wgx7jeGti48HRRIvzuC1x7uqXOrS8bm7CiM6/nYoH6ZiopSpjNLBeGCZeC2PE6PDIj5YbQBfCPpZABlN53F5qiOe3D+g3WXJLaXwBGs06lNu5VnV3ybmQHSwcAmT+n8Mw1WjcUit38ldYeROeBYI0dbgEWtfKmHGuRt7iR6A/8AUTdpUuQpzCIIWRUqOEi5+9X/r78Qx7GQo4Lb3Dum/eIZy4Hmm45+Ol5y98LBgQouV7bqsAyyGevHggOerMb3WyZrG2WxIECyqVu7yiRVQx1zLhMw8kk7vSwkYWJ3vaZocvKXtLcl2wpO8xqWqzN3yEk5hPQYybPQwCZBU85x2fsazFbLUe7WSHAx8In8DbpynyegK0ZbLbJLyJAbdu6iNQ/ynqpGsPxTkY7cPqHcW7tHUZx+GBYWNHSBBeoj6iNtPSFoIQy8/Rbqxky0Zmvx6QOxTynDGprQ2v0UMzivC7QMopqyF64g9XRiyRa3meozrolm0WXtzRF4ycyLvMhg4rnsW47MvJrNJNvEhclEDpT5PeP2YF7eBtR3kcfz+4yk3Ps/pfI46kZLQCf675YJiKrb9vgNybDsePzn3zf/35uYtXm6ePrwBHssTx5pPVXGZDPveQA4eEo6+CnbUx/Muk0MHMaY127eGqSVue0WkeQH6eJbbBTaaDCvq7a3dXCfqLthml3MBD1E56qAC3zL3UYgcSeQ3nh+WVoTUnLMKO0V/Ha/YZRagWjIZ2XxTfSlEsHVHe/lAJ3HcGDUuNv4aJUExLKU2KiooOXc1sE7+qVbtEO7MmCko584FXuAqwn7NCk11N1r A+s8F9LT0rX3sXw9zKyrWz4Sdc3Ih6qFuo/KOITz7tZiMK1V2zqQTNVaenSLX+SaRu3z2zwouAFK5jWE0T+rzTyoSm1H3uKzH2ugrWna2HVfjgDttaH0pqpUm3JyJ7WJ2HVtoglBK+4nJ0r6Ld90yAmNPQox7n/76CCbP+HHtXXgDcBcVFrJWQ+v9dnjfJEm2qnlwK4sAgku28bUEnEoDmviVlanxSAdXOoz29+p/ED0jNPKjCU0N6cnYmlIa+L+jGO58ckdIi8eRp/Hfe0GcqoxCGpZta07//q+1YrzQoIeof+y3MCKPbbtVH/kijUV4j/txhU3SagnErVMtPjcSjWtMK83sUIBTojhoPkq61QgSTzZSpgcizTbm/JsUDyu3ZHrWlFKjIao4H+X5VUMv9qUkK+tif+vkmGoObLFHUBbU72qB8V9u0k3T+5NTbP497Zp/69jf9SAyOZ0l6nBVe+DzuHzZZffxwtbLDmIIkqiMz4aMmCJvsdVFziKkuCn+n+PgeKbWsnOC8vXUe/H64DQcDZYo+JygWUE+yULJaExNtgsArthff9HaKV4aapxcQvMjKNUCnP4naahKqARyjFBcxfz8sIA== Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gl8-20020a170906e0c800b00a3bf40be1basi360655ejb.597.2024.02.09.01.59.50; Fri, 09 Feb 2024 01:59:50 -0800 (PST) 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=LvfLQJUm; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5C6A868CEAB; Fri, 9 Feb 2024 11:59:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 24B8068B22E for ; Fri, 9 Feb 2024 11:59:41 +0200 (EET) Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2907a17fa34so584005a91.1 for ; Fri, 09 Feb 2024 01:59:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707472778; x=1708077578; 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=trbOOeq/Psrbd00OcEdzjn58V0XdhRc3nxEt4OxafPc=; b=LvfLQJUmbNimvvc7NJNlYGVTd0OKqJY41cR3xD4WuPjVfACjMX/iFVicBM9XelsCKD I+cCQhPpMryru2Vkp8iK43ZiAuylg3QXisYjFs7Wtu2ZZYnvOyK4ewLGxa5Mn6rQ0VxQ YR/UbuJ8ed/GLN5DQrK811u8HtT/sN7Rda56cqZ30yqt2K95xfswmn4+fb+XS2j13VAQ xZvfPQT//3FHAWASe52C1PgW262rDUVR1gO+eiBb7NwwXFOxoMQR66NoMKYVYGdwE5jp QEYf5QNln3XB3jIHBLoonliNXDWLqV1r4miyBzN7vvbmgqtOUyvxTD9mK4o5xmSnvGbG X6iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707472778; x=1708077578; 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=trbOOeq/Psrbd00OcEdzjn58V0XdhRc3nxEt4OxafPc=; b=XWeJnCLNp01C4c6/ZQtPej3AhtJht6qXCVXKK3PxcH3ctYwYp3kTfteC156W1p9owp dSwZ8vBOT66nMDiMA7EBgCB3tdI1KUi25A8schNOr0A2hkvNFaf+uXwmsejq0P25xHzu Pdxk2QRizIOq95JyrizdeSRPwJf0ommPjvSJ7nWlijU/REzKgZero7vO2FvKaCK+MCUe GBnGn/P9IT5ljgRBNRITuwSzJtlq+mNCoJe/hc2ZB3quN40Ca3ZQFiSzmU+M9MIDhXQI CbeccJGHSstskfKff2KKXfwuGLizd6vnT5WZ7rS6WNXCFVj6dkdahSZ+OZKLQZKpSaPb 6RvA== X-Gm-Message-State: AOJu0YyGz4xun6Z9YhEgo52Oo+5QpN/T/Wv4bquQ/xDNfyvi6oD3mNPe jIL7SYTf8dMSaK8ZEOeIak033LTkGlB62v/J5rVwGcYVhzvXK9yyDN1R5JWffGw= X-Received: by 2002:a17:90b:2e83:b0:296:84e1:de64 with SMTP id sn3-20020a17090b2e8300b0029684e1de64mr976698pjb.20.1707472778278; Fri, 09 Feb 2024 01:59:38 -0800 (PST) Received: from localhost ([2601:647:4600:84e0:d085:ac8a:daf1:f5a1]) by smtp.gmail.com with UTF8SMTPSA id nc16-20020a17090b37d000b00296f2c1d2c9sm1339110pjb.18.2024.02.09.01.59.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 09 Feb 2024 01:59:37 -0800 (PST) From: Connor Worley To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Feb 2024 01:59:33 -0800 Message-Id: <20240209095933.88301-1-connorbworley@gmail.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] lavc/dxv: align to 4x4 blocks instead of 16x16 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: Connor Worley Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nivfnsbADlxO The previous assumption that DXV needs to be aligned to 16x16 was erroneous. 4x4 works just as well, and FATE decoder tests pass for all texture formats. On the encoder side, we should reject input that isn't 4x4 aligned, like the HAP encoder does, and stop aligning to 16x16. This both solves the uninitialized reads causing current FATE tests to fail and produces smaller encoded outputs. Signed-off-by: Connor Worley --- libavcodec/dxv.c | 6 +++--- libavcodec/dxvenc.c | 13 ++++++++++--- tests/ref/fate/dxv3enc-dxt1 | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c index e1c7cee3e8..9261a5cac1 100644 --- a/libavcodec/dxv.c +++ b/libavcodec/dxv.c @@ -1238,9 +1238,9 @@ static int dxv_init(AVCodecContext *avctx) return ret; } - /* Codec requires 16x16 alignment. */ - avctx->coded_width = FFALIGN(avctx->width, 16); - avctx->coded_height = FFALIGN(avctx->height, 16); + /* Since codec is based on 4x4 blocks, size is aligned to 4 */ + avctx->coded_width = FFALIGN(avctx->width, TEXTURE_BLOCK_W); + avctx->coded_height = FFALIGN(avctx->height, TEXTURE_BLOCK_H); ff_texturedsp_init(&ctx->texdsp); diff --git a/libavcodec/dxvenc.c b/libavcodec/dxvenc.c index ebc48aace3..3023a6da6c 100644 --- a/libavcodec/dxvenc.c +++ b/libavcodec/dxvenc.c @@ -216,6 +216,13 @@ static av_cold int dxv_init(AVCodecContext *avctx) return ret; } + if (avctx->width % TEXTURE_BLOCK_W || avctx->height % TEXTURE_BLOCK_H) { + av_log(avctx, AV_LOG_ERROR, "Video size %dx%d is not multiple of %dx%d.\n", + avctx->width, avctx->height, + TEXTURE_BLOCK_W, TEXTURE_BLOCK_H); + return AVERROR_INVALIDDATA; + } + ff_texturedspenc_init(&texdsp); switch (ctx->tex_fmt) { @@ -229,10 +236,10 @@ static av_cold int dxv_init(AVCodecContext *avctx) return AVERROR_INVALIDDATA; } ctx->enc.raw_ratio = 16; - ctx->tex_size = FFALIGN(avctx->width, 16) / TEXTURE_BLOCK_W * - FFALIGN(avctx->height, 16) / TEXTURE_BLOCK_H * + ctx->tex_size = avctx->width / TEXTURE_BLOCK_W * + avctx->height / TEXTURE_BLOCK_H * ctx->enc.tex_ratio; - ctx->enc.slice_count = av_clip(avctx->thread_count, 1, FFALIGN(avctx->height, 16) / TEXTURE_BLOCK_H); + ctx->enc.slice_count = av_clip(avctx->thread_count, 1, avctx->height / TEXTURE_BLOCK_H); ctx->tex_data = av_malloc(ctx->tex_size); if (!ctx->tex_data) { diff --git a/tests/ref/fate/dxv3enc-dxt1 b/tests/ref/fate/dxv3enc-dxt1 index 3cfd73397e..74849a8031 100644 --- a/tests/ref/fate/dxv3enc-dxt1 +++ b/tests/ref/fate/dxv3enc-dxt1 @@ -3,4 +3,4 @@ #codec_id 0: dxv #dimensions 0: 1920x1080 #sar 0: 1/1 -0, 0, 0, 1, 76767, 0x932ecbfa +0, 0, 0, 1, 76521, 0xed387a5e