From patchwork Fri May 5 08:31:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?5b6Q56aP6ZqG?= <839789740@qq.com> X-Patchwork-Id: 41479 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp312662pzb; Fri, 5 May 2023 01:32:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5VkFjNM0c/mVTVZLLgvX8Jwo9sZA1Lk2eiUJqOzaLVt+LD6k3IeDPTm0uAe+NsBhJe7vQu X-Received: by 2002:a17:906:ef06:b0:960:d9d:ffb5 with SMTP id f6-20020a170906ef0600b009600d9dffb5mr474772ejs.41.1683275522006; Fri, 05 May 2023 01:32:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683275521; cv=none; d=google.com; s=arc-20160816; b=qZGY3zxzuODnWlwfH24UEQxPK5k/rJOm3eaoUBCnbIPAbbbT1sMa+FxsW4/VZSQ3Wj Uw7cfA4UAwjt3VKLYQqzHDJzRyo1XULf2DcGLtBe5tAIVco1dsh1/+FQPdyeLT5+XWOQ gYGpOer45s89jo4dEdLyd3YLoKT9gEh9IlrN10dmLz/JzFIwu9sv1UqFCq57Vsx63eco Wwt/zxwUPYRpETEqcUhmN26IaPRhaHMo66zqD2WZYRHpMx46if7CZa3nC4u+mnHAjdOQ efzMxO4afjxhstidPeYk1uHhK6ON7aYCK0TQGyfAjUjM72be7xvX2Bz2WgUBeuaZ9UXD MZhw== 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:date:to:from:message-id :dkim-signature:delivered-to; bh=17h7RKy9R0ExmPz4sQFF48gZ5RmUqAWUxJVlao8rGhI=; b=ql1Y0KLahkIdIX1IusMeEoYm1c6nGwVVR6DdM4FjNDXiNv7sxLZDbRy65no69W/n+w lEkbf/jx+4UaZarONiUB4hXin/tF2v0zQXq4BNbRYHUPRWDwNfQj2Q47RELBQyMdY8at jMYH1uxf391J2Boie8HkULvpnZZMGeDgs79/iHxuGwM2BUfF2eazKhC4WY36oMg3CupN CI3o8lpt0A9O4ZxLbAFKFjnKWQsr3Yx/y5khAJGc5KLQKJ7H8c50bqhaVchEGrsbsWZi wvoBC6nLv71MBKwiBIvyWiX5NCYin7LLCunzB+CMltNs6OSCjccPJlb9Ch6aNL70zdii 4caw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@qq.com header.s=s201512 header.b=oWW4aR5e; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t16-20020a1709067c1000b00965c3f9cf72si779995ejo.92.2023.05.05.01.32.01; Fri, 05 May 2023 01:32:01 -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=@qq.com header.s=s201512 header.b=oWW4aR5e; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D9E03680C11; Fri, 5 May 2023 11:31:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E014C68B5DA for ; Fri, 5 May 2023 11:31:49 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1683275505; bh=FSkq9nBqufiWkf6kj9Nb2xiZpOdqiVpc/P0AvGQa5bg=; h=From:To:Cc:Subject:Date; b=oWW4aR5eWz4OW/I+VkkB8V14wSslH3TphIH04Qtojj8cJq4F8sbbnkIieHknBRaHM MGi+RI3w23w3owg5MXrKTgpS5EPgQC+7Ju4aSNdQFeOJNzeG7kusdlxp4Y2+qt5gKG FfHRCr7yUcEGlD+b8GJOvsrp80RBsL+t2cIiGWos= Received: from localhost.localdomain ([113.65.129.59]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 7EC044A5; Fri, 05 May 2023 16:31:44 +0800 X-QQ-mid: xmsmtpt1683275504tkbk4anom Message-ID: X-QQ-XMAILINFO: M7r/zttrUmlkRwFuL1WsO/5zfKp6kwzRLh3RTUILYLLUMiAoD+vwDtLbnZ5CLq Zflnua4t7HduQJut27OewQdscRmIOACvCdllFQvBBFqThGuqx6JMM5lTnc9S7LPixTlNtPKMsWLz 0WtSBEc0i/XWA1Ue3S1J9EVYAvbNXEO8unBVM3XiyOG0s5or2jCpcIl2CCnhIkf93k9k0cfwJsZX RYvgR44af7BgnuRcNgClh9R/sxiCJTVHzbT7rBU3g169VGEC4vdnR4fu7brYS+4UPeHytBvtzCcE mkba+PlqI8+1t34dOHD9vFMqlvRlJFBfWirqgE8RpSdP4YoroBBnTAyaB+N0pTn0dNR5xzx9hGPS XoubdUp1JenGGNsm29gx5Mk8scTDXT4+ApYX3XbLEoDTTcOkFaEbTKRd1aviffWQOhLCbBCv5FmH zSfZXU86e1Rt+GY7CV6hw/1WwDy5iuxuBHeao/OB01E1ylwSKDlbrbas0USqx/T8jk9kv31Kli9l 7ZzfoU/yEhkP+nL9Kd+oNBtd70wPlamRLGD0VUJc5S2TI1TL/uWT349Z5uSTOhv3BaYsDXZWTYPj fkIKf7f8K38JbpdRXKRzt2Oc1DtwLnqSKYkOhmp8Yz9n/i32uzXCnCOVZ58KSdC3XtcqL/SPfPfs RPdY524ic56xpjzZZt1I1ptUwyPP4HbDutKd/z+A4ci6MxS/wHO5OeEmUUTIihcLK9kvSPE0jGIt 8ZKjCNMBNs/lyyDq4L4eFXUiDLCtGHyEuslvrKn8E7YwDeSE40riEPnX5OprZuYHNys31nEllL8z XdLnAltdmfqNXEUVjvkyv8mHAdG+u78uJccLJujWuKaTeOCzIWO4u4AJcbzH1/J0FqtwD5wNR6+K jNCyuWVs85Eojn5aBwR1yS7pJzhGizWKj9pGX2Jni+g4bVMNRFE+rPVdwINT85yJvglgc7P9AL4i YvWssL4uwK2C3GHF1PbNiGF0/11BWBEKOH8fYWAnMbQsyYBm+i6g== From: xufuji456 <839789740@qq.com> To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 May 2023 16:31:41 +0800 X-OQ-MSGID: <20230505083141.91561-1-839789740@qq.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avutil/imgutils: optimize image copying 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: xufuji456 <839789740@qq.com> Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: WpRpoyoMKdS4 It makes sense when copying 4K/8K video frame, got 2.7% speed up. When the condition is no padding and src_linesize equals to dst, we could copy plane instead of line by line. before after rate 4K video: 9145 8998 1.6% 9804 9465 3.4% 9645 9394 2.6% 8K video: 28411 27718 2.4% 31288 30056 3.9% 32336 31571 2.4% Signed-off-by: xufuji456 <839789740@qq.com> --- libavutil/imgutils.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index 9ab5757cf6..f5898756ba 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -525,10 +525,18 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size, const uint8_t *src = src_data[i]; h = (height + (1 << shift) - 1) >> shift; - for (j = 0; j < h; j++) { - memcpy(dst, src, linesize[i]); - dst += FFALIGN(linesize[i], align); - src += src_linesize[i]; + // When src's linesize equals to dst, we could copy plane directly + if (src_linesize[i] == linesize[i] && FFALIGN(linesize[i], align) == linesize[i]) { + int len = linesize[i] * h; + memcpy(dst, src, len); + dst += len; + src += len; + } else { + for (j = 0; j < h; j++) { + memcpy(dst, src, linesize[i]); + dst += FFALIGN(linesize[i], align); + src += src_linesize[i]; + } } }