From patchwork Sun Nov 11 02:24:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 10976 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 759D644CEBB for ; Sun, 11 Nov 2018 04:24:40 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E5AF3689A7B; Sun, 11 Nov 2018 04:24:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 50BEE6883B6 for ; Sun, 11 Nov 2018 04:24:04 +0200 (EET) Received: by mail-qk1-f182.google.com with SMTP id a132so8149576qkg.1 for ; Sat, 10 Nov 2018 18:24:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=0dkuTsabPJw9gRzp4Ipdk5hvUyXnijvryH3LiFB5LkQ=; b=bBbW91arXPPde1CgkkAPeRwrd21hfrnmAerZxxORlWLSiwnJ1OJ82iI5xoK5qiBPmt HRqnD+X8B/k+TWnvVXRnEuRw0XCovxh2gT6WyQKgogMZaMUNCOW7F4iaQIM0ZkGWvm2B m1VXmP/UejgdW+lvLsE/RAA+yACSKYq3PCcYrsGbyvy/Jmeb6j2wlVNukXCwwk0yFRz5 vnW1OLkBY9NbngpuKMzED0HPkqKwdp2MNrrTE8ffF29Sm7MkB7VhgBklWqjaVaOJ41dC yXs0kgJe9ykAEE0TMBCH6tgZBKmGxjyvsvqPiIL4NsLzJEZL/ho1b42PysdcoYFKcdGT xHTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0dkuTsabPJw9gRzp4Ipdk5hvUyXnijvryH3LiFB5LkQ=; b=VJJJJ593Nfdj43qSoszFlJfhJIA0QIN/q8JbBCrjGBg27BUt5XM69KQw8I40KffNHp QEbfuC1fGxqHrXbFu3eyjfvTCqxYR0PTcaB0xi+/AKdT1wZQ6bYzQLr3vpiouyWyrzPv SEZstsBw3MsfBXV0L14QL25jykffC+1zccmXp1LgMRNtnlrsCbPwr6x2VH9gkjiZheR2 Il9S1mcutId1Fe8O9vgcD+vMEiE+J4v/NWQCC6DKlDdWysaXZqDS7SOOSA+ym9pfoJBc Hz/WZs7w6pYGMXuclF0gI4jIOzmelmVRlAlLcUs/mfgWQQQPo0IUpN6EaQaHoP4opc4U adtg== X-Gm-Message-State: AGRZ1gL4tysHKZA2VasolF1a79uCMRrXHxgS7P2IJLOnIXNWDtseBM8S 3arMBIcq3B/tRqmVHlvHiAWrpAT5 X-Google-Smtp-Source: AJdET5cgIZbTcB5Yk1LMaswD3VsHbCcUMKffMqwVVIOKZB8c7tIq76u2qLcSDBZtLWp8OXbxKtgH5w== X-Received: by 2002:a37:f50e:: with SMTP id l14-v6mr13832710qkk.224.1541903079655; Sat, 10 Nov 2018 18:24:39 -0800 (PST) Received: from localhost.localdomain ([179.38.188.206]) by smtp.gmail.com with ESMTPSA id c77sm9002168qkh.82.2018.11.10.18.24.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 10 Nov 2018 18:24:39 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 10 Nov 2018 23:24:14 -0300 Message-Id: <20181111022414.10964-2-jamrial@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181111022414.10964-1-jamrial@gmail.com> References: <20181111022414.10964-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_av1: fix parsing signed integer values 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- See https://0x0.st/sljR.webm libavcodec/cbs_av1.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index ff32a6fca5..215f9384e8 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -189,30 +189,26 @@ static int cbs_av1_read_su(CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, const int *subscripts, int32_t *write_to) { - uint32_t magnitude; - int position, sign; + int position; int32_t value; if (ctx->trace_enable) position = get_bits_count(gbc); - if (get_bits_left(gbc) < width + 1) { + if (get_bits_left(gbc) < width) { av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid signed value at " "%s: bitstream ended.\n", name); return AVERROR_INVALIDDATA; } - magnitude = get_bits(gbc, width); - sign = get_bits1(gbc); - value = sign ? -(int32_t)magnitude : magnitude; + value = get_sbits(gbc, width); if (ctx->trace_enable) { char bits[33]; int i; for (i = 0; i < width; i++) - bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0'; - bits[i] = sign ? '1' : '0'; - bits[i + 1] = 0; + bits[i] = value >> (width - i - 1) & 1 ? '1' : '0'; + bits[i] = 0; ff_cbs_trace_syntax_element(ctx, position, name, subscripts, bits, value); @@ -226,29 +222,21 @@ static int cbs_av1_write_su(CodedBitstreamContext *ctx, PutBitContext *pbc, int width, const char *name, const int *subscripts, int32_t value) { - uint32_t magnitude; - int sign; - - if (put_bits_left(pbc) < width + 1) + if (put_bits_left(pbc) < width) return AVERROR(ENOSPC); - sign = value < 0; - magnitude = sign ? -value : value; - if (ctx->trace_enable) { char bits[33]; int i; for (i = 0; i < width; i++) - bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0'; - bits[i] = sign ? '1' : '0'; - bits[i + 1] = 0; + bits[i] = value >> (width - i - 1) & 1 ? '1' : '0'; + bits[i] = 0; ff_cbs_trace_syntax_element(ctx, put_bits_count(pbc), name, subscripts, bits, value); } - put_bits(pbc, width, magnitude); - put_bits(pbc, 1, sign); + put_sbits(pbc, width, value); return 0; }