From patchwork Fri Dec 16 13:19:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ronald S. Bultje" X-Patchwork-Id: 1837 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.65.86 with SMTP id o83csp1327302vsa; Fri, 16 Dec 2016 05:25:15 -0800 (PST) X-Received: by 10.194.209.169 with SMTP id mn9mr2726647wjc.114.1481894715082; Fri, 16 Dec 2016 05:25:15 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r142si3332760wmd.52.2016.12.16.05.25.14; Fri, 16 Dec 2016 05:25:15 -0800 (PST) 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; 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 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 DE2ED689AC7; Fri, 16 Dec 2016 15:25:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 07F8B68075D for ; Fri, 16 Dec 2016 15:24:59 +0200 (EET) Received: by mail-qt0-f193.google.com with SMTP id m48so10774641qta.2 for ; Fri, 16 Dec 2016 05:25:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=grKft13Jlr1WbdTcPFwvF5kxFlODNRgNFtHITOLl/Lc=; b=JDerjg8GAmUPewIIgnrGI9T1fZR0/xxDVxWLDwa33NbUzBMA0DQO/m0Er16wXROMo3 HXrmiKcsxazgwLAXSYHr170cqbgnkQ03gcy/J1Cw5LmlzZ2A5CXrn5LbWaDUDDZEaABg IRmXdj59QC2doABPTmU3x53APp2+/rny6x5TEM5r2JSef6CafwbxZO1R9lYpbaLFSQgK 8i5TA1WVLVh6B99TP9iAzgIlyay7GcbY+DI409LKxe4Mj9V+ASdaPfe1qM0mXmmYTG4t r+KGsdzrUJwgpsa6zBRYD4MEFY41DQ7TbOGtJzKRrggM/htllK4SggKdWUkb9TNr3qxl IZzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=grKft13Jlr1WbdTcPFwvF5kxFlODNRgNFtHITOLl/Lc=; b=tzB5pIPAAwqj2dBrY0JgEP/Q5IGcgzzH7jqFCpqgV/hA1wJDeu8dFfl3pq0759zNW3 d/hNprrvPbwoTpW1ExvKtjnR7NbMpXfiKsU2VehkyjhleKJbXl/ed34/xCzydBpu+645 b3E2IjMfhPO0+W+JpTwfEsS5vlxZJqcgu97UySOeA2Du3uvdCImYqINDE9lvkGdXx2jc gXTJbk1YIlKeAmRd2nbnBG7XvSVu3frGYd9S+CiCk8FGEZxjOil+3R6s7JGaxadru+Zl 165srOuiVA8gOdwU6QCptVdsAhdgtclZIkE8pGDwQFTSMQ4QQlz0Mhhe/AxVt3Y/dPmw 7NQg== X-Gm-Message-State: AIkVDXJrg28ek3PisCicy5QfrEiPwYEvfdcBZYPXN8HR43ogSB5ApHu6g3br7xuvelUthg== X-Received: by 10.200.56.186 with SMTP id f55mr2389348qtc.75.1481894388454; Fri, 16 Dec 2016 05:19:48 -0800 (PST) Received: from localhost.localdomain ([65.206.95.146]) by smtp.gmail.com with ESMTPSA id 30sm3663720qth.14.2016.12.16.05.19.47 (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 16 Dec 2016 05:19:47 -0800 (PST) From: "Ronald S. Bultje" To: ffmpeg-devel@ffmpeg.org Date: Fri, 16 Dec 2016 08:19:44 -0500 Message-Id: <1481894385-64104-1-git-send-email-rsbultje@gmail.com> X-Mailer: git-send-email 2.8.1 Subject: [FFmpeg-devel] [PATCH 1/2] wmavoice: don't check if we have enough bits to read a superframe. 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 Cc: "Ronald S. Bultje" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The checked bitstream reader makes this unnecessary. --- libavcodec/wmavoice.c | 83 --------------------------------------------------- 1 file changed, 83 deletions(-) diff --git a/libavcodec/wmavoice.c b/libavcodec/wmavoice.c index ceac61f..0f29bdd 100644 --- a/libavcodec/wmavoice.c +++ b/libavcodec/wmavoice.c @@ -1654,83 +1654,6 @@ static void stabilize_lsps(double *lsps, int num) } /** - * Test if there's enough bits to read 1 superframe. - * - * @param orig_gb bit I/O context used for reading. This function - * does not modify the state of the bitreader; it - * only uses it to copy the current stream position - * @param s WMA Voice decoding context private data - * @return < 0 on error, 1 on not enough bits or 0 if OK. - */ -static int check_bits_for_superframe(GetBitContext *orig_gb, - WMAVoiceContext *s) -{ - GetBitContext s_gb, *gb = &s_gb; - int n, need_bits, bd_idx; - const struct frame_type_desc *frame_desc; - - /* initialize a copy */ - init_get_bits(gb, orig_gb->buffer, orig_gb->size_in_bits); - skip_bits_long(gb, get_bits_count(orig_gb)); - av_assert1(get_bits_left(gb) == get_bits_left(orig_gb)); - - /* superframe header */ - if (get_bits_left(gb) < 14) - return 1; - if (!get_bits1(gb)) - return AVERROR(ENOSYS); // WMAPro-in-WMAVoice superframe - if (get_bits1(gb)) skip_bits(gb, 12); // number of samples in superframe - if (s->has_residual_lsps) { // residual LSPs (for all frames) - if (get_bits_left(gb) < s->sframe_lsp_bitsize) - return 1; - skip_bits_long(gb, s->sframe_lsp_bitsize); - } - - /* frames */ - for (n = 0; n < MAX_FRAMES; n++) { - int aw_idx_is_ext = 0; - - if (!s->has_residual_lsps) { // independent LSPs (per-frame) - if (get_bits_left(gb) < s->frame_lsp_bitsize) return 1; - skip_bits_long(gb, s->frame_lsp_bitsize); - } - bd_idx = s->vbm_tree[get_vlc2(gb, frame_type_vlc.table, 6, 3)]; - if (bd_idx < 0) - return AVERROR_INVALIDDATA; // invalid frame type VLC code - frame_desc = &frame_descs[bd_idx]; - if (frame_desc->acb_type == ACB_TYPE_ASYMMETRIC) { - if (get_bits_left(gb) < s->pitch_nbits) - return 1; - skip_bits_long(gb, s->pitch_nbits); - } - if (frame_desc->fcb_type == FCB_TYPE_SILENCE) { - skip_bits(gb, 8); - } else if (frame_desc->fcb_type == FCB_TYPE_AW_PULSES) { - int tmp = get_bits(gb, 6); - if (tmp >= 0x36) { - skip_bits(gb, 2); - aw_idx_is_ext = 1; - } - } - - /* blocks */ - if (frame_desc->acb_type == ACB_TYPE_HAMMING) { - need_bits = s->block_pitch_nbits + - (frame_desc->n_blocks - 1) * s->block_delta_pitch_nbits; - } else if (frame_desc->fcb_type == FCB_TYPE_AW_PULSES) { - need_bits = 2 * !aw_idx_is_ext; - } else - need_bits = 0; - need_bits += frame_desc->frame_size; - if (get_bits_left(gb) < need_bits) - return 1; - skip_bits_long(gb, need_bits); - } - - return 0; -} - -/** * Synthesize output samples for a single superframe. If we have any data * cached in s->sframe_cache, that will be used instead of whatever is loaded * in s->gb. @@ -1771,12 +1694,6 @@ static int synth_superframe(AVCodecContext *ctx, AVFrame *frame, s->sframe_cache_size = 0; } - if ((res = check_bits_for_superframe(gb, s)) == 1) { - *got_frame_ptr = 0; - return 1; - } else if (res < 0) - return res; - /* First bit is speech/music bit, it differentiates between WMAVoice * speech samples (the actual codec) and WMAVoice music samples, which * are really WMAPro-in-WMAVoice-superframes. I've never seen those in