From patchwork Wed Dec 19 22:00:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: matthew.w.fearnley@gmail.com X-Patchwork-Id: 11481 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 8B00F44C442 for ; Thu, 20 Dec 2018 00:00:42 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BCBA068AC0B; Thu, 20 Dec 2018 00:00:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E10BB68ABEF for ; Thu, 20 Dec 2018 00:00:36 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id p4so21061781wrt.7 for ; Wed, 19 Dec 2018 14:00:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sOHLkRpx6DtJHoD0g+JqsOX9AV2YUsUfLDY+CngiXGM=; b=tn0Wk4nIxQiPas2MHBkdRiFJCwng5GT50LGULgZutot46G5mX69LEeQ81nP/5Yb05z wwGKwOHvc18tv5MQgCR8LFbgfA458EjrxOc7hksYIG534qya8jpRdPxYoWbhs79ZyAMn BOtybenIHERr/KWwmiH1qzyYgFhANjIHwMsbgeAA5fBrr2wEy/T1n3ZpUesP6JtnEEaE Dh5m7raCoNT2zFlVSb+e27F8HfRHTvCRIbzAJqyZFC3Vkc9zerxMfO8n1Y/j0GTRVY2L XP3adBOXC6NhlQ7J6/4fO/E0rex3Ko2UaYWAnHZZypelCPh6y0OSmj0BEwVZkTAnKGkc WEDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=sOHLkRpx6DtJHoD0g+JqsOX9AV2YUsUfLDY+CngiXGM=; b=igV6XSe8uRQ8veHvY7FCanYFvlCuNjum8SLi07Hy2CsfUaIpjSYAl0JbUA48vtCnwC P5rXdmPUgukVPO8cDznvpUcDMZACBl/IcaZzemSiKY2DPhgC+G9azfGXIp7Le2pUvioS ACB6Rd2WW7btcmntrD1pP8lFezeIqHtnnch7bG7twhhLsUymMK9MznXFMQas6B/1Oz4E NDklIvLHkhpX7sgfaUP2AzHSy9SmCRMHqB+2q8KtMYi3dvXfUWgYd+ERGqM+PetMxDId b7elaXTdDxmTo7A1281Ki+RBhK66cHUT8T5HJSmFxvjZnkPEOkpPqOkZHj88eyzfiFRd MJUA== X-Gm-Message-State: AA+aEWb2AwBNTEvnPlIhSIbJayeBFU4ZK2sNeeMA6gXAIw6dQjpnWzmp RRn6VjIajTb+gpk+ryGu85Fhgwsi X-Google-Smtp-Source: AFSGD/VzhSpD1rSS6XCW9zBf249acWHojklEC226kyLEFVKpAmwvUtD3ZadcIJ0Z4Jv+4c7hVajM+g== X-Received: by 2002:a05:6000:104b:: with SMTP id c11mr20535386wrx.303.1545256838427; Wed, 19 Dec 2018 14:00:38 -0800 (PST) Received: from localhost.localdomain (cpc131498-bagu18-2-0-cust88.know.cable.virginm.net. [86.9.33.89]) by smtp.gmail.com with ESMTPSA id k135sm8967078wmd.42.2018.12.19.14.00.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Dec 2018 14:00:37 -0800 (PST) From: matthew.w.fearnley@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Dec 2018 22:00:01 +0000 Message-Id: <20181219220003.27225-2-matthew.w.fearnley@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181219220003.27225-1-matthew.w.fearnley@gmail.com> References: <20181219220003.27225-1-matthew.w.fearnley@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/4] zmbvenc: ensure mx, my, xored are always set together in zmbv_me() 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: Matthew Fearnley MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Matthew Fearnley Store the value of *xored computed within block_cmp() in a local variable, and only update the *xored parameter at the same time as *mx,*my are set. This ensures that the value of *xored is accurate for the value of *mx,*my whenever the function ends. Note that the local variable is not needed in the intial block_cmp for (0,0) because *mx,*my and *xored are all set there. The previous logic worked by exiting early if ever !*xored, but put implicit requirements on block_cmp() to: - always return 0 if !xored - never return a negative value --- libavcodec/zmbvenc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/zmbvenc.c b/libavcodec/zmbvenc.c index 2f041dae32..0e8ee5ce31 100644 --- a/libavcodec/zmbvenc.c +++ b/libavcodec/zmbvenc.c @@ -100,6 +100,7 @@ static int zmbv_me(ZmbvEncContext *c, uint8_t *src, int sstride, uint8_t *prev, int pstride, int x, int y, int *mx, int *my, int *xored) { int dx, dy, tx, ty, tv, bv, bw, bh; + int txored; *mx = *my = 0; bw = FFMIN(ZMBV_BLOCK, c->avctx->width - x); @@ -111,11 +112,12 @@ static int zmbv_me(ZmbvEncContext *c, uint8_t *src, int sstride, uint8_t *prev, if(tx == x && ty == y) continue; // we already tested this block dx = tx - x; dy = ty - y; - tv = block_cmp(c, src, sstride, prev + dx + dy * pstride, pstride, bw, bh, xored); + tv = block_cmp(c, src, sstride, prev + dx + dy * pstride, pstride, bw, bh, &txored); if(tv < bv){ bv = tv; *mx = dx; *my = dy; + *xored = txored; if(!bv) return 0; } }