From patchwork Thu Apr 4 05:02:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47794 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp100698pzd; Wed, 3 Apr 2024 22:03:47 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXXLlgltjYO04NViZPkad5opNH8lrVFko0mc5k8HqQSmM/GZ+mRulQA9aDfySruSn55TcZj78NYBIIX+7fl+rkGeXXS3QHjUjjmmg== X-Google-Smtp-Source: AGHT+IHimt6HW84xDpWudX7RRceMpkU1qItW7xXMuzr/J67Qhjhfb9jA4fIS0KUEfefX87fXoiMg X-Received: by 2002:a50:d75e:0:b0:56b:986b:b4e7 with SMTP id i30-20020a50d75e000000b0056b986bb4e7mr1024103edj.27.1712207027056; Wed, 03 Apr 2024 22:03:47 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i21-20020a05640242d500b0056c465c3797si7814545edc.70.2024.04.03.22.03.46; Wed, 03 Apr 2024 22:03:47 -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=@outlook.com header.s=selector1 header.b=h6CWQN0z; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5E74768D1B3; Thu, 4 Apr 2024 08:03:11 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2054.outbound.protection.outlook.com [40.92.90.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30C5768B43D for ; Thu, 4 Apr 2024 08:03:06 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cPD96m+ZS1/fEAz61mtdb3hYFlsJxvlR4Cshhi1S2H0jJgGWN2xg12V5rgOHXFjqiUQlsUuWVELwkpOTNcSDcCmTLcFV/lt+TnVN18XjuSRce1EvD0+hjSqyDOMXcUI2YIPAuusAFY0OKh7eItzYa+f1r18t7ko718t/0hg2kdNb9xsI0Y2Q2KnbVvBzxoWSU6puStVRiae0PiHSHDkMc4Vm0QUcPpMneWy5a6ZmIKVNV7+uWKnRATX1pVE/sP6nfvPOl3s4wnnFoZgcfqM/tfL6u9T4lVL3Ka9auPZdJz/vSlHbAXESml7YPrwnVDBaujqgl1EKS+lTPtxJD9bCeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2UpOj7iSh6A991FEnC78fHa/S0qw1Af105NBDWddq9Y=; b=i4Qpwg2QBiRpMVVMHWYGtgsXqdbUGWS4zPjG66oi8oukmW/PonqOtq0oF0MeasO4CS4Pd4Ic9HMQYiuMhkuV0XffFBLdo/iMmqgr05g5fonnfV4hcv9DeLD3ooRGs3DshcdUthT2JXbZdWOkYNgRbagiGwqTPo+672kRf3pRTTeSoK/N35y4LbbUuGDNcBDCGW7+92zwWWF30vSOOi7FVH9osTrNP9dN0x6X3tNcGvGm8sxxereLFCoiyp8Jy1hxBSL+gIJpfLAV0OqVFEnlRslwq5G11KcxzJs255TBby9td611zNfUq1Dit618JiJ7Jpd5Gw5lRTUftL3f35NIqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2UpOj7iSh6A991FEnC78fHa/S0qw1Af105NBDWddq9Y=; b=h6CWQN0zDzwjm/iQf8oIiY2rr6BAF9VSzuDMBvWPT2Ghqf9EfId4IzjkEegKaEe/repPX7qZFvO18TO3UzgM/HYlnqIQUvbUMxjSRsLJblqTOJa67VKBVw9Ojitzvog9S6VPvQG5vKvR9eEr0j84ekszzyYh36fonjm1WmereKoa0Kj98OR2a/UltlBB8nakFQXusRC9pp0Cw6DKYxhpHyvZ7QhrSIwJMe86DyIcUnklsYWLJncqNXmI7yNd1M96fYyKrLQXPB/y7NVEbcrJi6w8qFBVOjcxm0iV7a3lDcF79JQ6extwaiUhrUZN+CwID4ruKFluou7cqkldrrLSNw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU0P250MB0436.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:348::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Thu, 4 Apr 2024 05:03:03 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Thu, 4 Apr 2024 05:03:03 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Apr 2024 07:02:50 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [pfU6HgoIaZoGWVnpenmVQqh+MuwmCM1gAXJ9ZPyHVG4=] X-ClientProxiedBy: ZR2P278CA0028.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:46::8) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240404050250.3450360-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU0P250MB0436:EE_ X-MS-Office365-Filtering-Correlation-Id: 76039cb9-980b-4b65-2f15-08dc54648221 X-MS-Exchange-SLBlob-MailProps: quCBMN2EvO+/Tg02NQSOAqMNnTlnxFBGee/+bcf8dxwG+xvell2aJ2jhJ8ubWD5PxO17Gz94vtAfsU1O/P7smXzM9/vwwOqI4LluYEgCFpT5ABMx5CMQE7KlMuy3+vIV7TJUkGOTeT5BkKAYckz/wsR+iZ+/I+1B4Fpn8LQg7nYCK1zqtTMfxQ1Qc6r8OTdF//QCYu52oKUZlCtus5OaH2bVyXQsh/LLhxwlOOT3EDzGckHs1LFGklEV8EdnVXaBFFBKur8iQ/rM+zMmUxOH53tuAFf3kUGkH8dhbWfQszjrX0x0AReqIQ23DTiYc1SUToUEzIJZhHgtvKblaGCwICwaevpNpARClII8D4CWSErylemu2AeKqfX/hj+S//m/8QTjo0UxxOoFf0mLhJ7Z0tE2GyLl+dVcBjD1lPn2DtKksEJ5BMsRRSHpJ0Zb0HxwCAfcV0sEMZaG+9VxRwfkkAZkjVmolHKWUNVsBos1Q8JDUUQtdpRcFZj3cfXxqrKoNygwA6837a4x3vxWXrpy5jyxq5WdetYrlgmIGstduYuXbOzWbNp6Whpa6R7JYGZs3biQFxDPfb2qfMukVI4I3nT4ZPOAEvy0k1MH4vQrtE54ieAYuuJPsmNZg6SlE3gcf+J53lD0RIi5vD1XiReFf083FW4Lfu33x905HGOpIl2oeXjfGTY/EYwoXZB8jyQEHUt9S5sG+SITdYrHYPtf7w== X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Uyttm0xASkeWiFkDVcL8KG1SuQTQiJlsmOGwGMDzwszAnt0sT5pS6JVSVdasYIdCXYwJyHGT5S02xQ+1aaZ235ZbsErjFfrNFYGptcrAZIH9DK1FuPgWvpaf1k/MtJjurIEAL4U2jUGHjNW/opZHhpIfR9GuehuNyvbzHXQl68RWlRzWJdbcvTuw7eGah9RE19bEyWgkYykjQzodd5OZtx8E9lh3+zF0PxMPX35dvlHgS/177z9aginFfoYt2iskaiEpJh7iPOiUFpbttC0YbzfWPwOZ3VJUrbfswwMtdNaKFAi1yy5ONQMWZZ7pTBy0q5SwnL+M3aBw1qLxlGezVcSq9CaBS1jOS7v5T3Ahhby5lqkkaaydfy2yxfhhu9BkHy3qG/ZzP/SCLrIOOEa7CYAvYjQ8DF40cuiLLrTfCtfEL/iswr2kCppYLwlOVJZTnzJ9qDUSy/6OT7aOMKH2WefcpRuxA7mj0cRXGCE8QgRGxaZQle4J/P5My9zpgXJsP/RXPUOWjXq2YLGakti02AjSpy2OMO4E3Pie3HRn87+kxlMQHHkTPeuklR98gaD+YA0uEPG1xUQ6dxJucsC5olzY+7Cl4HdWkEglfBL0TIP+sCKA1o4ii/Uqc3xsgm9x X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dUZP3HuaRPiLEYQKFPt8P4DfI0HYBrpJT/g8ycYdqcHDNZrV2Dl57iJY5qzssavEn+iSSWPaV6wa7pzbFg923QXl8XNJyrQmmSdg/z3IeQcM/ie6R8GWzC9RIvW+Hk7h+r3mwRXqgXETXES0vg0XG0wOzg2qhZBWyhgcvHz1Vd7Brvvpb9rm/drYsSsVTlXnStLxq/5Cyqmbq00tjY+gq9D0EF4VESfcgUn9bE0Z2dtye1iMsZKGufYFk8mqOZ3+sPufaDl3VQWDuxrNS8/sSJ7tbscCDg09ALkpcISU0xx49PJLpbQIw4lnU4JjzXMU/APOFwAePocMSeWRSTXO1ZzC+5Gv3jQ4TBF9+Rc2w7y1F/dgs+M6+huKabYpJkCCKfQiuOHiUVe/79QpJWSv6OUD0gP/spGUrhtOUXnqOoA6QC31bNz6TB8eUZ7nSrPwzWbY4H7HxDc96x/SDTaAHDMaXCza0tNtMfL7sH8mztooZ2b7L026Vqy08h/faF0BQAHgY+d05hRC42mQ/WtnIuFnyQaFAWtCj271iq09upB64AQ629wXHH2DyyZVQdDbXvizdPnEIoeWwMLel8gM+TpOJuMUyND/hZqrOfblPJmG0EI4c15xW8BPZw46GbCJaJ4EZ6dqIEdp729RnCR6njbYcnDkaqOd3HIEL3FwXfkcBD2A/uovs5csg0ih2BEPcTa4T+ev2bfai2zntgYm7TP7NVnVH74ia55Qbu9K3EDIeOw8XeRmfkIwZrHnwjmK2fBWbSkFpeRok7pbgYyN6IqZ1Nc3FzwxomL9bI/p04d/JB4Pe9hyJHZNs9cKl/Nwh4xRnyffggzG2c+2EOKYUt+FAoCjcDHv0lC0rUWO+LKbRQXkwZQdmRFVDMA56gnG3KSeWD/AAfYxX8Sb3Mg2t+Jk+jHMguetsZmb0+UjfSsnUeRxAUnGKt9dGRStBpix4gYPHI3hn0XouDghf4NixEeOZJ38uRk29wdaOtv2DZMx2mYZAYPr2ZV9NN47sB7jNDrX3lCpa9o/eKL9q3ryRag0ZRJamCewMU5ENGiWlNCJXrw3EDxWyq7fYSh2nKfxXmaY6bKocf3EhERfC9sKEDxfPOh9MTyipyFsxejEdxb1nGkGL+1KtiqmCjTpK3N1mJMacIDZTxpAg4kR7wj4hLAbbQTV8eucvXrAEKSrXd7fo5QAsUH9+V9kx6ajp4SByYnA1Hn2u3Z+1z2yLkfnAglJrrdG8vhAGRh0SIYQF9xRt6ZFMqubgSQK6V8FdK/4IQHqz7k3RhTnc4lc1KL69g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76039cb9-980b-4b65-2f15-08dc54648221 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Apr 2024 05:03:03.8833 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0P250MB0436 Subject: [FFmpeg-devel] [PATCH 6/6] avcodec/huffyuvenc: Avoid code duplication 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: QZpXYrxXHq3t This also fixes misindentated code. Signed-off-by: Andreas Rheinhardt --- libavcodec/huffyuvenc.c | 146 ++++++++++++---------------------------- 1 file changed, 43 insertions(+), 103 deletions(-) diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index fd6b01de81..d822793406 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -499,7 +499,7 @@ static int encode_422_bitstream(HYuvEncContext *s, int offset, int count) static int encode_plane_bitstream(HYuvEncContext *s, int width, int plane) { - int i, count = width/2; + int count = width/2; if (put_bytes_left(&s->pb, 0) < count * s->bps / 2) { av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n"); @@ -546,112 +546,52 @@ static int encode_plane_bitstream(HYuvEncContext *s, int width, int plane) put_bits(&s->pb, s->len[plane][y1>>2], s->bits[plane][y1>>2]);\ put_bits(&s->pb, 2, y1&3); - if (s->bps <= 8) { - if (s->flags & AV_CODEC_FLAG_PASS1) { - for (i = 0; i < count; i++) { - LOAD2; - STAT2; - } - if (width&1) { - LOADEND; - STATEND; - } - } - if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) - return 0; +#define ENCODE_PLANE(LOAD, LOADEND, WRITE, WRITEEND, STAT, STATEND) \ +do { \ + if (s->flags & AV_CODEC_FLAG_PASS1) { \ + for (int i = 0; i < count; i++) { \ + LOAD; \ + STAT; \ + } \ + if (width & 1) { \ + LOADEND; \ + STATEND; \ + } \ + } \ + if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) \ + return 0; \ + \ + if (s->context) { \ + for (int i = 0; i < count; i++) { \ + LOAD; \ + STAT; \ + WRITE; \ + } \ + if (width & 1) { \ + LOADEND; \ + STATEND; \ + WRITEEND; \ + } \ + } else { \ + for (int i = 0; i < count; i++) { \ + LOAD; \ + WRITE; \ + } \ + if (width & 1) { \ + LOADEND; \ + WRITEEND; \ + } \ + } \ +} while (0) - if (s->context) { - for (i = 0; i < count; i++) { - LOAD2; - STAT2; - WRITE2; - } - if (width&1) { - LOADEND; - STATEND; - WRITEEND; - } - } else { - for (i = 0; i < count; i++) { - LOAD2; - WRITE2; - } - if (width&1) { - LOADEND; - WRITEEND; - } - } + if (s->bps <= 8) { + ENCODE_PLANE(LOAD2, LOADEND, WRITE2, WRITEEND, STAT2, STATEND); } else if (s->bps <= 14) { int mask = s->n - 1; - if (s->flags & AV_CODEC_FLAG_PASS1) { - for (i = 0; i < count; i++) { - LOAD2_14; - STAT2; - } - if (width&1) { - LOADEND_14; - STATEND; - } - } - if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) - return 0; - - if (s->context) { - for (i = 0; i < count; i++) { - LOAD2_14; - STAT2; - WRITE2; - } - if (width&1) { - LOADEND_14; - STATEND; - WRITEEND; - } - } else { - for (i = 0; i < count; i++) { - LOAD2_14; - WRITE2; - } - if (width&1) { - LOADEND_14; - WRITEEND; - } - } + + ENCODE_PLANE(LOAD2_14, LOADEND_14, WRITE2, WRITEEND, STAT2, STATEND); } else { - if (s->flags & AV_CODEC_FLAG_PASS1) { - for (i = 0; i < count; i++) { - LOAD2_16; - STAT2_16; - } - if (width&1) { - LOADEND_16; - STATEND_16; - } - } - if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) - return 0; - - if (s->context) { - for (i = 0; i < count; i++) { - LOAD2_16; - STAT2_16; - WRITE2_16; - } - if (width&1) { - LOADEND_16; - STATEND_16; - WRITEEND_16; - } - } else { - for (i = 0; i < count; i++) { - LOAD2_16; - WRITE2_16; - } - if (width&1) { - LOADEND_16; - WRITEEND_16; - } - } + ENCODE_PLANE(LOAD2_16, LOADEND_16, WRITE2_16, WRITEEND_16, STAT2_16, STATEND_16); } #undef LOAD2 #undef STAT2