From patchwork Tue Sep 7 09:28:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ross X-Patchwork-Id: 30057 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp4492466iov; Tue, 7 Sep 2021 02:28:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz5J2zojNJdvdD6oluaGNePyQaBHdPuWoIbiRjjsGHQRMRKORBQh37Hpg0pEQNqt0cxWxy5 X-Received: by 2002:a17:907:76e5:: with SMTP id kg5mr17608862ejc.474.1631006918976; Tue, 07 Sep 2021 02:28:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631006918; cv=none; d=google.com; s=arc-20160816; b=b6s0q0Is8G6cEv+PmAYmWRvlKhjRFzagPfzcMr07mjNKlgC0CifY8oQmTZ0c8ZTTXR 8tcAY8H/7U3dg0ul8KNklYhkHPBHahLWePymVmbhQrd2XH18d0gZgfpl7LXGOjf8ctSy V8MBWo8apyeiP9SALGDEouv9b5kqT5Ag7pP8awYT69PnE2ookGPuPnDTpCN6lt0rxBpi 4mSL8azO5rpJfJ9Y/Xtq9IrAdNX0sL8ZoBLXduHaTSK771kksTg+XFCdFvI910Cyv4Pe nkl3m+Lp3fzS0qHLy2p3+x0Vq/PstJx7H9yM+SGFY1vmwisZrgEYOxGSOgbmQqlY2ll3 NUKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :in-reply-to:mime-version:references:message-id:to:from:date :delivered-to; bh=TrdIQMdi5/9b96qIScAyjf610Ldj8azrqXteDAyXzAU=; b=PMvfqu7IsDyJ8Y0o54oLmRSj0jWKI+ti2sJWVq7ZYZgQ5DjMMFWznL4NiXnrdDoTd4 rxZTRACY+OQryO9/6xsrBk+xWcNxmHf2qrVrUXKnJlDjdECew8rxRWMf2vZEOsbWYC30 TATduBhxhtPEyKDQyBAns5J4ay0iNoPe2/c1lobhVe/hVHoT46+zwjZrPs6hTGSwutcV 66Wp9bZlSgp+iF6UlNdcFLysJj4fUxowg5e241mM4oDQKNRwmFgyLkukTui6YEmyc5qr LDPit8j8GcOkWDuEY4ePXusR47mcWo0rId9CnbbblpcLKlhKvumescLLJXQx6RKOsgas cMdw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g6si11995296edb.162.2021.09.07.02.28.38; Tue, 07 Sep 2021 02:28:38 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D926668A72F; Tue, 7 Sep 2021 12:28:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx.sdf.org (mx.sdf.org [205.166.94.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ECB3468A71E for ; Tue, 7 Sep 2021 12:28:28 +0300 (EEST) Received: from 686d654cea04e5370928f0cbd8458c3e ([1.145.166.80]) (authenticated (128 bits)) by mx.sdf.org (8.15.2/8.14.5) with ESMTPSA id 1879SN5S004403 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO) for ; Tue, 7 Sep 2021 09:28:26 GMT Date: Tue, 7 Sep 2021 19:28:19 +1000 From: Peter Ross To: ffmpeg-devel@ffmpeg.org Message-ID: References: <52654437a219b6d23d7779be9a9268d45850de3b.1631006828.git.pross@xvid.org> MIME-Version: 1.0 In-Reply-To: <52654437a219b6d23d7779be9a9268d45850de3b.1631006828.git.pross@xvid.org> Subject: [FFmpeg-devel] [PATCH 3/4] avcodec/siren: add checksum calculation 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +pewYl5Rw8NC --- libavcodec/siren.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/libavcodec/siren.c b/libavcodec/siren.c index ccc69aaf40..31fb9346da 100644 --- a/libavcodec/siren.c +++ b/libavcodec/siren.c @@ -752,7 +752,34 @@ static int siren_decode(AVCodecContext *avctx, void *data, frame_error = 1; } - skip_bits(gb, s->checksum_bits); + if (s->checksum_bits) { + static const uint16_t ChecksumTable[4] = {0x7F80, 0x7878, 0x6666, 0x5555}; + int wpf, checksum, sum, calculated_checksum, temp1, temp2; + + wpf = bits_per_frame / 16; + + checksum = AV_RB16(avpkt->data + (wpf - 1) * 2) & ((1 << s->checksum_bits) - 1); + + sum = 0; + for (int i = 0; i < wpf - 1; i++) + sum ^= AV_RB16(avpkt->data + i * 2) << (i % 15); + sum ^= (AV_RB16(avpkt->data + (wpf - 1) * 2) & ~checksum) << ((wpf - 1) % 15); + sum = (sum >> 15) ^ (sum & 0x7FFF); + + calculated_checksum = 0; + for (int i = 0; i < 4; i++) { + temp1 = ChecksumTable[i] & sum; + for (int j = 8; j > 0; j >>= 1) { + temp2 = temp1 >> j; + temp1 ^= temp2; + } + calculated_checksum <<= 1; + calculated_checksum |= temp1 & 1; + } + + if (checksum != calculated_checksum) + frame_error = 1; + } if (frame_error) { memcpy(s->imdct_in, s->backup_frame, number_of_valid_coefs * sizeof(float));