From patchwork Mon Jul 10 14:11:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: foo86 X-Patchwork-Id: 4290 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp3620320vsb; Mon, 10 Jul 2017 07:30:16 -0700 (PDT) X-Received: by 10.28.230.211 with SMTP id e80mr8347861wmi.17.1499697016771; Mon, 10 Jul 2017 07:30:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499697016; cv=none; d=google.com; s=arc-20160816; b=TaWi7TjtQad2gsBSaHqPrVCOEne/IDZeZ4Sd3odseDkrKD77rNMCPJFPu5VubSLevQ n9cIAQeES53+iFzvo6Y234TlaKTt3dZmdUZ6/V3deDw7ja2rHCJA1iFNXJp/3Mw/MYRL Nxq9MYxcjQN1jSruJM0NNCRU79zDZJA6DwW9oy3qjRwxATHo1mF2+t52MzNH0/POuYIP vuIHHI61+BbUc534GFXU5hh79Dg81w56z7iokvyNuCsKYnXIk4VKRNrAo+cuMNh4DQ5k Nf67HYN5y21Ha0zi+XSx7nm1YLON/QKZ1EWlPZCjKozCARgrXeEA85P341kqSJ0FkKXZ jOgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=Z8zWghbLrIJSV9mTcQXj9npXgDxyoGWELPG96J40kCY=; b=K1q6BjRlS5gLu7StH4mZku/Vi8q6v86IQsR01eSrbq4mi0dnOrgfxTWp4QpG+2MGUu bXknZBRr0LJmVIhD530hGHexPMSM9g3CLrE1UCduJujx1mT+o9fZd2WdpN7JfuhNIM7a 3Dnlg2ciyFaXeQ4m77cAfMMi+LnaUPFG00xBFhlZi4ez27ioc2kqKUZIqPMhqpQb5OrD akv0luJIkBC2tgSiRvICImNbd9Owxrp1t25PD9B9HmPRBoCpmKBv2YNuwFy7cEzTDob9 jW+3Pij4ZE7aaMmbz9k02V2rsS9xSzPvAZDr1+efb8c8FZqqAUI9Vec/ZZTwacX9TCOC dZ3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=UyhdGmiK; 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=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p64si4706347wmp.45.2017.07.10.07.30.14; Mon, 10 Jul 2017 07:30:16 -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=@gmail.com header.b=UyhdGmiK; 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=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 45D4D689DF1; Mon, 10 Jul 2017 17:30:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f68.google.com (mail-lf0-f68.google.com [209.85.215.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6149B689DDC for ; Mon, 10 Jul 2017 17:30:01 +0300 (EEST) Received: by mail-lf0-f68.google.com with SMTP id g21so10798930lfk.1 for ; Mon, 10 Jul 2017 07:30:05 -0700 (PDT) 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; bh=XR22UbjrazbN8+KldC4ecDpYM6ynmjW05cZ3lKAHQYk=; b=UyhdGmiKjHotMtVTsBc/hYvwLBMbVSgIwnTqA6eGUrEQEILCuc2gZH9AP/waSYXD3u 4BzzKUG8JJ2IZGY9kv/CYLE3M/lTqF+/NeABA889Sxwc1+VQmufVQtFsjSVrK4SHhypL HSO7l7823PPB9sDNhT2Ug/IglFWN5nUu6bDaInorLQ+tJvMcVmEEnpU3lU2u482fQt2J 7yrKUyYMqkRAhl7YhurfyI0ptd2BhNK7GQ4R1enknTf/okorgGx28zvH3TojgYqkgORT qr9Yby+AuhF0vQ/em9eNjybyi1cLM5a89aLj4A5CFV2++TuoTP+q74LpeGvlfAljTRyR NKjA== 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; bh=XR22UbjrazbN8+KldC4ecDpYM6ynmjW05cZ3lKAHQYk=; b=DQAZq6L758Ym5ucV+keCIKLyTHfiGzc2zMqMTFA1i6dIQmjogj6Di0QnmnsSWm119E I4cdeFRPjfJ/2CKkmFULsKRiosjved7z9wv5+rgHltBjoudUV+D0IQ8daRrUITyRnVG+ DzsQPrDWEQnJeM9NENwJDIBRBwEDUsas4KbaL+gOGV+Wg4+RD5Buv1mH61bK/ooQAjvy Bp0mS2uKwoutlPFrOEDQd+hmI16MnuqhfX8LZGlUHmmPaxHxlNmn9H7hrOlWXLDbp5t4 wCJB4rigGomR/Zytai+0DLs+CR3H/S/7HcLLaiSvo1uhsZP1QmPeRmrlCScVkco+ay+/ Xp6g== X-Gm-Message-State: AIVw11042yLZ/BmMe/zXsJMAgKdkrxJi5KIDjMSQJoDL4Ho460Z/Sx2R ii2mgeX6Xq0uNrcp X-Received: by 10.46.21.88 with SMTP id 24mr4707234ljv.98.1499696534350; Mon, 10 Jul 2017 07:22:14 -0700 (PDT) Received: from foohost.foodomain ([2001:470:28:661::4]) by smtp.gmail.com with ESMTPSA id v196sm2722713lfa.16.2017.07.10.07.22.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Jul 2017 07:22:13 -0700 (PDT) From: foo86 To: ffmpeg-devel@ffmpeg.org Date: Mon, 10 Jul 2017 17:11:40 +0300 Message-Id: <20170710141140.20075-10-foobaz86@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170710141140.20075-1-foobaz86@gmail.com> References: <20170710141140.20075-1-foobaz86@gmail.com> Subject: [FFmpeg-devel] [PATCH 10/10] avcodec/dca: avoid using bitstream reader in a non-standard way 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Use proper get_bits.h functions instead of directly accessing index. --- libavcodec/dca_core.c | 12 +++++++----- libavcodec/dca_core.h | 1 + libavcodec/dca_xll.c | 2 +- libavcodec/dcadec.h | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libavcodec/dca_core.c b/libavcodec/dca_core.c index 4a7ea4e3f3..3add9f812b 100644 --- a/libavcodec/dca_core.c +++ b/libavcodec/dca_core.c @@ -1804,6 +1804,7 @@ int ff_dca_core_parse(DCACoreDecoder *s, uint8_t *data, int size) if ((ret = init_get_bits8(&s->gb, data, size)) < 0) return ret; + s->gb_in = s->gb; if ((ret = parse_frame_header(s)) < 0) return ret; @@ -1831,7 +1832,6 @@ int ff_dca_core_parse_exss(DCACoreDecoder *s, uint8_t *data, DCAExssAsset *asset { AVCodecContext *avctx = s->avctx; DCAContext *dca = avctx->priv_data; - GetBitContext gb = s->gb; int exss_mask = asset ? asset->extension_mask : 0; int ret = 0, ext = 0; @@ -1843,11 +1843,13 @@ int ff_dca_core_parse_exss(DCACoreDecoder *s, uint8_t *data, DCAExssAsset *asset ret = parse_xxch_frame(s); ext = DCA_EXSS_XXCH; } else if (s->xxch_pos) { - s->gb.index = s->xxch_pos; + s->gb = s->gb_in; + skip_bits_long(&s->gb, s->xxch_pos); ret = parse_xxch_frame(s); ext = DCA_CSS_XXCH; } else if (s->xch_pos) { - s->gb.index = s->xch_pos; + s->gb = s->gb_in; + skip_bits_long(&s->gb, s->xch_pos); ret = parse_xch_frame(s); ext = DCA_CSS_XCH; } @@ -1889,8 +1891,8 @@ int ff_dca_core_parse_exss(DCACoreDecoder *s, uint8_t *data, DCAExssAsset *asset s->ext_audio_mask |= DCA_EXSS_X96; } } else if (s->x96_pos) { - s->gb = gb; - s->gb.index = s->x96_pos; + s->gb = s->gb_in; + skip_bits_long(&s->gb, s->x96_pos); if ((ret = parse_x96_frame(s)) < 0) { if (ret == AVERROR(ENOMEM) || (avctx->err_recognition & AV_EF_EXPLODE)) return ret; diff --git a/libavcodec/dca_core.h b/libavcodec/dca_core.h index cce0ffd7b1..10128d1e32 100644 --- a/libavcodec/dca_core.h +++ b/libavcodec/dca_core.h @@ -101,6 +101,7 @@ typedef struct DCADSPData { typedef struct DCACoreDecoder { AVCodecContext *avctx; GetBitContext gb; + GetBitContext gb_in; // Bit stream header int crc_present; ///< CRC present flag diff --git a/libavcodec/dca_xll.c b/libavcodec/dca_xll.c index 38a1999fc8..d265cab8df 100644 --- a/libavcodec/dca_xll.c +++ b/libavcodec/dca_xll.c @@ -1028,7 +1028,7 @@ static int parse_band_data(DCAXllDecoder *s) return ret; chs_clear_band_data(s, c, band, seg); } - s->gb.index = navi_pos; + skip_bits_long(&s->gb, navi_pos - get_bits_count(&s->gb)); } navi_ptr++; } diff --git a/libavcodec/dcadec.h b/libavcodec/dcadec.h index 456f3c433b..9da8d3b444 100644 --- a/libavcodec/dcadec.h +++ b/libavcodec/dcadec.h @@ -88,9 +88,9 @@ static inline int ff_dca_check_crc(AVCodecContext *avctx, GetBitContext *s, static inline int ff_dca_seek_bits(GetBitContext *s, int p) { - if (p < s->index || p > s->size_in_bits) + if (p < get_bits_count(s) || p > s->size_in_bits) return -1; - s->index = p; + skip_bits_long(s, p - get_bits_count(s)); return 0; }