From patchwork Sat Sep 18 10:03:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ross X-Patchwork-Id: 30354 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp121804iov; Sat, 18 Sep 2021 03:03:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzVpSpRFF5FixGid9LGlY7I1dS+LH475jHTMhnArNkExFnfU4fpD5TDLn2kffG0HvZP+qO5 X-Received: by 2002:a05:6402:5107:: with SMTP id m7mr17813136edd.63.1631959421096; Sat, 18 Sep 2021 03:03:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631959421; cv=none; d=google.com; s=arc-20160816; b=0qN3eAdY9U5mSt+X2o6jueTYTObXnxf/tbYOnQk+X3+3bCjIBaeNPONQIt775Nc1Ub bvZTv1DQzJnP/35lzKEPPTqvSs2Q7EM66z8VZOCj67YBtTC7c8VNpj/d71+c/U2hzGfD uAKLgT8XfXOpCbXDXjSF7mGy8ev5/A7lRhGQGPgZVts9FAChe+1RcjbmkWRxsDyCbUIu 1IKuH7VbVL4OBZ3C2qKw8qN+GozzSR7ogSbxZzhZ2u1v+6Z5ynymh7z+7dpeV8KLbQdh AEYLQq4OMTT5gjZy4wS+/zmBOllDgwkBhYHclcZ8gPw03MoOzeI+GQtAGMPaip3YalVl /d3g== 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=3++wvG8hvJgWY7WX9Cm03x7UvPFrkDsC6Q15pA6m4Ps=; b=RhjEJ8VB4tkiRdUv6iJfXDtyT/k10qhYqvqJ9vgwx1drCVtdQ8rbfmoNaM5osZxZwc vovWNZz1lN8AUx4iVvVlu4DykK6DCP1FK5aDT1bcamA9DoTGt4KVvvzcRWDonHjniYAn Hl4SXuWK0FpsjovL6c6v6Sayw4PSqgCc5HqLhRlCQEniJ5E6gOTLpgMFNzhD2nu7EwzC oyxI1zksHzkqD7YoDYNns+v+UijWWtm71cPeB4gDfNv+uTkJKNYrBVLm+MdOm06UVa97 1ZFYYEHGfO7j/wqLLm2DLDJ60ZSEW0L5pT8TGyuUaloNlnyrN8cXA4fZHeNCdKKgYKpz CYDw== 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 gb4si5414147ejc.246.2021.09.18.03.03.40; Sat, 18 Sep 2021 03:03:41 -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 8642F68B15A; Sat, 18 Sep 2021 13:03:38 +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 81A8068AC21 for ; Sat, 18 Sep 2021 13:03:36 +0300 (EEST) Received: from 4d660feff0cdf23df522b53dcb6770fa ([1.145.161.12]) (authenticated (128 bits)) by mx.sdf.org (8.15.2/8.14.5) with ESMTPSA id 18IA3T81024615 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO) for ; Sat, 18 Sep 2021 10:03:34 GMT Date: Sat, 18 Sep 2021 20:03:26 +1000 From: Peter Ross To: ffmpeg-devel@ffmpeg.org Message-ID: References: <5da14be177af2fd768c1cde4d450b27d659a5472.1631959242.git.pross@xvid.org> MIME-Version: 1.0 In-Reply-To: <5da14be177af2fd768c1cde4d450b27d659a5472.1631959242.git.pross@xvid.org> Subject: [FFmpeg-devel] [PATCH 3/3] 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: Fk9Nfl97xPg7 --- libavcodec/siren.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/libavcodec/siren.c b/libavcodec/siren.c index 92fd3632f5..2d3969f24c 100644 --- a/libavcodec/siren.c +++ b/libavcodec/siren.c @@ -756,7 +756,37 @@ static int siren_decode(AVCodecContext *avctx, void *data, frame_error = 1; } - skip_bits(gb, s->checksum_bits); + if ((avctx->err_recognition & AV_EF_CRCCHECK) && s->checksum_bits) { + static const uint16_t ChecksumTable[4] = {0x7F80, 0x7878, 0x6666, 0x5555}; + int wpf, checksum, sum, calculated_checksum, temp1; + + checksum = get_bits(gb, s->checksum_bits); + + wpf = bits_per_frame / 16; + 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) + temp1 ^= temp1 >> j; + + calculated_checksum <<= 1; + calculated_checksum |= temp1 & 1; + } + + if (checksum != calculated_checksum) { + av_log(avctx, AV_LOG_WARNING, "Invalid checksum\n"); + if (avctx->err_recognition & AV_EF_EXPLODE) + return AVERROR_INVALIDDATA; + frame_error = 1; + } + } if (frame_error) { memcpy(s->imdct_in, s->backup_frame, number_of_valid_coefs * sizeof(float));