From patchwork Thu Feb 9 17:40:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Converse X-Patchwork-Id: 2468 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp108030vsb; Thu, 9 Feb 2017 10:02:35 -0800 (PST) X-Received: by 10.28.52.19 with SMTP id b19mr4298322wma.134.1486663354983; Thu, 09 Feb 2017 10:02:34 -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 36si13701801wrk.321.2017.02.09.10.02.34; Thu, 09 Feb 2017 10:02:34 -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 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 A5E3368799F; Thu, 9 Feb 2017 20:02:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f196.google.com (mail-pf0-f196.google.com [209.85.192.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2C3F56804C1 for ; Thu, 9 Feb 2017 20:02:20 +0200 (EET) Received: by mail-pf0-f196.google.com with SMTP id f144so660330pfa.2 for ; Thu, 09 Feb 2017 10:02:23 -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:in-reply-to:references; bh=dfgcbANh+pWslLBOiIWyobFwcdINPOkGddX7+apYiyA=; b=bWD5yVFH0tp8zM0D2lWQWKRzVEZWJC2F4HA3SdnokwbOFBu2ckxhslzcbpJakQP51W T+vBJm2EvmSsOZGoyp0R/qbBkdriGjdNFJQPaLu/u0Y3T3gC/I3nNx6W83r3OkeoB+kc hIaTfPW/+EYsBvxsg0swVOji06tyWH45jMsdlLcITDbVos8diL5/OKtouOe49OH3Btyf DCCcUtW0nhrkFKud8UEH5cm+/rPG4prQgLdhSedj0aHV7KZw14I5hgxeT0IdKVGxBAw9 dGgzM/cHjM4+RX5l55ppHMEl3bVZUWd2MU37pPUDcY5EdDRcoPlADIIDnAU7Ry9J4Juh IIGg== 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:in-reply-to :references; bh=dfgcbANh+pWslLBOiIWyobFwcdINPOkGddX7+apYiyA=; b=EjY83leLq78Y+yiHDH9IVQvSJBACBFUZnQAGowFHzDPzaMVUJsQrtvLEMha+aoZD8t eL9tztzdaeryPanXlHVrtVyo5m5awR8ve6tcf65xNhHhMdJH4TQ4z30n8arOH8sSr7Qg B46ls7KTh6V+i2sRBcvMYcu6e1mqCNvfiMjlYX0+z9mwoS0R/I2v+4cq5T4IpLkUm9VZ 9zikG/18dTw0CCYl8zUeawMKDggbVS3575O76FQ3lxZzY8BReEePoghximayI7XlaENk HdqZE07fG66RKmi5z+12/FbNXNt+Yd/Gc1ipQ/AZn31jqNUyQufiCqmL/AMeOlR23uwB pYLA== X-Gm-Message-State: AMke39k2Mgaq/Ag/CyCCg1ssnlzpyViupDZwobP90KdAYTFajn6s7iZO3yl8e6t+9cQE5A== X-Received: by 10.98.81.6 with SMTP id f6mr4936457pfb.180.1486662071394; Thu, 09 Feb 2017 09:41:11 -0800 (PST) Received: from terok.mtv.corp.google.com ([172.22.116.121]) by smtp.gmail.com with ESMTPSA id g70sm30488524pfb.50.2017.02.09.09.41.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 09 Feb 2017 09:41:10 -0800 (PST) From: Alex Converse To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 Feb 2017 09:40:37 -0800 Message-Id: <20170209174039.8218-2-alex.converse@gmail.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog In-Reply-To: <20170209174039.8218-1-alex.converse@gmail.com> References: <20170209174039.8218-1-alex.converse@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/4] aac_latm: Copy whole AudioSpecificConfig when it is sized. 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: Alex Converse MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This preserves sync extensions. --- libavcodec/aacdec.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 709ac7cdf8..08d92fe145 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -289,17 +289,19 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx, int sync_extension = 0; int bits_consumed, esize, i; - if (asclen) { + if (asclen > 0) { sync_extension = 1; asclen = FFMIN(asclen, get_bits_left(gb)); - } else - asclen = get_bits_left(gb); - - if (asclen <= 0) + init_get_bits(&gbc, gb->buffer, config_start_bit + asclen); + skip_bits_long(&gbc, config_start_bit); + } else if (asclen == 0) { + gbc = *gb; + } else { return AVERROR_INVALIDDATA; + } - init_get_bits(&gbc, gb->buffer, config_start_bit + asclen); - skip_bits_long(&gbc, config_start_bit); + if (get_bits_left(gb) <= 0) + return AVERROR_INVALIDDATA; bits_consumed = decode_audio_specific_config_gb(NULL, avctx, &m4ac, &gbc, config_start_bit, @@ -309,6 +311,9 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx, return AVERROR_INVALIDDATA; bits_consumed -= config_start_bit; + if (asclen == 0) + asclen = bits_consumed; + if (!latmctx->initialized || ac->oc[1].m4ac.sample_rate != m4ac.sample_rate || ac->oc[1].m4ac.chan_config != m4ac.chan_config) { @@ -320,7 +325,7 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx, } latmctx->initialized = 0; - esize = (bits_consumed+7) / 8; + esize = (asclen + 7) / 8; if (avctx->extradata_size < esize) { av_free(avctx->extradata); @@ -336,9 +341,9 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx, } memset(avctx->extradata+esize, 0, AV_INPUT_BUFFER_PADDING_SIZE); } - skip_bits_long(gb, bits_consumed); + skip_bits_long(gb, asclen); - return bits_consumed; + return 0; } static int read_stream_mux_config(struct LATMContext *latmctx, @@ -379,8 +384,6 @@ static int read_stream_mux_config(struct LATMContext *latmctx, int ascLen = latm_get_value(gb); if ((ret = latm_decode_audio_specific_config(latmctx, gb, ascLen)) < 0) return ret; - ascLen -= ret; - skip_bits_long(gb, ascLen); } latmctx->frame_length_type = get_bits(gb, 3);