From patchwork Thu May 14 14:33:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Josh Dekker X-Patchwork-Id: 19688 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 694C6449EC1 for ; Thu, 14 May 2020 17:33:47 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3F15C68A60C; Thu, 14 May 2020 17:33:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EC7906805C7 for ; Thu, 14 May 2020 17:33:40 +0300 (EEST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.west.internal (Postfix) with ESMTP id 8540983F; Thu, 14 May 2020 10:33:38 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Thu, 14 May 2020 10:33:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=itanimul.li; h= from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; s=fm2; bh=/evQgAXrQr2KsDH7/dxJNdUZ4I oZTKXhxc+NPtvVBGE=; b=MIHrFZTN/bcSXbsgBfIvFjSV/Mv51vuBI97QtfqEty UaI9RajsLq2UOcNbG6LnNpN6XHWOgtaQ9LUt7Pxl0X1vlS0MFQzS85zTYFA2VOwJ 3w0rOQADjO55Nk53P4d5IKL1ptShuRxKlTtQmqNlgvY6EEO1m4VLrZ084xgyEd/B RCW6wZt3FpILgRZgKz8Oyzkl26lcHEwYFuefMxBRsDSfUt0uJ/qmTYGVH2ywX5mT YMcOzH//77RQBiw2aeo3+oRju8TwIC74sXKkp5AXpG73wprcR9uWZYe/e5ApL0eC eLPns2zLVDue61nYtTFUiJpAngFJHxVpPxW2GXhhNl8g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=/evQgA XrQr2KsDH7/dxJNdUZ4IoZTKXhxc+NPtvVBGE=; b=Rvp0+j50wfDghZOLXGV4is zBudCgxNgtBT9Cq38wrubzD51oGozUgBserJiLiUJVlBz+ZkrsS0y4mFAc6hVFA+ xA/lWb9KtrT/Yrdu7KdLwuYWyZ8oBCxO2LV+HHZm7/IaPD6jZFR1BPTWNqd6rPJR v3Xnsi4GBx2ac5tHT4pSifEO7AE581h7/ie3giP6BTalgau6tBtP25OP0xBucSHR 1ANgDCMls2LPRZz1tA2WdUzH3B2rwch68TlDiieBcQRzOxNcddYnA6uheuZfIVjv RyEJkZmpRFamGNbl8mp11qyUWVwAgJQyngXkK5E+BeJE0dRBzyD/IqyhbskPCXxA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrleeigdejfecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvffufffkofggtgfgsehtkeertdertdejnecuhfhrohhmpeflohhshhcuuggv ucfmohgtkhcuoehjohhshhesihhtrghnihhmuhhlrdhliheqnecuggftrfgrthhtvghrnh epieffgfefgeevieevueehheegieduteduffdtheekvddvhedtffffteefgeeghefhnecu kfhppeekuddruddtgedrjeekrdduhedunecuvehluhhsthgvrhfuihiivgeptdenucfrrg hrrghmpehmrghilhhfrhhomhepjhhoshhhsehithgrnhhimhhulhdrlhhi X-ME-Proxy: Received: from localhost.localdomain (cpc107625-sotn16-2-0-cust150.15-1.cable.virginm.net [81.104.78.151]) by mail.messagingengine.com (Postfix) with ESMTPA id 14C6A3060EF2; Thu, 14 May 2020 10:33:37 -0400 (EDT) From: Josh de Kock To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 May 2020 15:33:34 +0100 Message-Id: <20200514143334.31313-1-josh@itanimul.li> X-Mailer: git-send-email 2.26.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] checkasm: Add functions for printing pixel buffers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: =?utf-8?q?Martin_Storsj=C3=B6?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Martin Storsjö This was ported from dav1d (c950e7101bdf5f7117bfca816984a21e550509f0). Signed-off-by: Josh de Kock --- tests/checkasm/checkasm.c | 42 +++++++++++++++++++++++++++++++++++++++ tests/checkasm/checkasm.h | 16 +++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 91066514f6..120052a816 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -269,6 +269,7 @@ static struct { int cpu_flag; const char *cpu_flag_name; const char *test_name; + int verbose; } state; /* PRNG state */ @@ -687,6 +688,8 @@ int main(int argc, char *argv[]) state.bench_pattern = ""; } else if (!strncmp(argv[1], "--test=", 7)) { state.test_name = argv[1] + 7; + } else if (!strcmp(argv[1], "--verbose") || !strcmp(argv[1], "-v")) { + state.verbose = 1; } else { seed = strtoul(argv[1], NULL, 10); } @@ -837,3 +840,42 @@ void checkasm_report(const char *name, ...) max_length = length; } } + +#define DEF_CHECKASM_CHECK_FUNC(type, fmt) \ +int checkasm_check_##type(const char *const file, const int line, \ + const type *buf1, ptrdiff_t stride1, \ + const type *buf2, ptrdiff_t stride2, \ + const int w, int h, const char *const name) \ +{ \ + stride1 /= sizeof(*buf1); \ + stride2 /= sizeof(*buf2); \ + int y = 0; \ + for (y = 0; y < h; y++) \ + if (memcmp(&buf1[y*stride1], &buf2[y*stride2], w*sizeof(*buf1))) \ + break; \ + if (y == h) \ + return 0; \ + checkasm_fail_func("%s:%d", file, line); \ + if (!state.verbose) \ + return 1; \ + fprintf(stderr, "%s:\n", name); \ + while (h--) { \ + for (int x = 0; x < w; x++) \ + fprintf(stderr, " " fmt, buf1[x]); \ + fprintf(stderr, " "); \ + for (int x = 0; x < w; x++) \ + fprintf(stderr, " " fmt, buf2[x]); \ + fprintf(stderr, " "); \ + for (int x = 0; x < w; x++) \ + fprintf(stderr, "%c", buf1[x] != buf2[x] ? 'x' : '.'); \ + buf1 += stride1; \ + buf2 += stride2; \ + fprintf(stderr, "\n"); \ + } \ + return 1; \ +} + +DEF_CHECKASM_CHECK_FUNC(uint8_t, "%02x") +DEF_CHECKASM_CHECK_FUNC(uint16_t, "%04x") +DEF_CHECKASM_CHECK_FUNC(int16_t, "%6d") +DEF_CHECKASM_CHECK_FUNC(int32_t, "%9d") diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 77e573774f..e98a800c50 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -258,4 +258,20 @@ typedef struct CheckasmPerf { #define PERF_STOP(t) while(0) #endif +#define DECL_CHECKASM_CHECK_FUNC(type) \ +int checkasm_check_##type(const char *const file, const int line, \ + const type *const buf1, const ptrdiff_t stride1, \ + const type *const buf2, const ptrdiff_t stride2, \ + const int w, const int h, const char *const name) + +DECL_CHECKASM_CHECK_FUNC(uint8_t); +DECL_CHECKASM_CHECK_FUNC(uint16_t); +DECL_CHECKASM_CHECK_FUNC(int16_t); +DECL_CHECKASM_CHECK_FUNC(int32_t); + +#define PASTE(a,b) a ## b +#define CONCAT(a,b) PASTE(a,b) + +#define checkasm_check(prefix, ...) CONCAT(checkasm_check_, prefix)(__FILE__, __LINE__, __VA_ARGS__) + #endif /* TESTS_CHECKASM_CHECKASM_H */