From patchwork Sat Sep 21 23:27:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 15219 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 69E9A4479A0 for ; Sun, 22 Sep 2019 02:27:57 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C76C68AAB8; Sun, 22 Sep 2019 02:27:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7C3CC6899F2 for ; Sun, 22 Sep 2019 02:27:50 +0300 (EEST) Received: by mail-qt1-f174.google.com with SMTP id j31so12997187qta.5 for ; Sat, 21 Sep 2019 16:27:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=DxWtR7S2iGd1IVSosmOS+2mOAX3RK9cRxSsT5UQ1aIg=; b=DN48SupnTezi72P8SVnmjm4NbgcQFaucQSPt03HNvjPt+SBL6382NakA+kdurY2M+y 4CDvXB6uX1HbUPjrhwUCXwyJCaxmIvFhvXe5KMctQvBCUigoBGlP9yjbrEtc/IXWAPjJ hywsphPByq9r6gRrVEE9OvBkBuwJYIcnBDz42v8Y+Ym0HVa1e2tyTitA009TzrG/nHfA gfG9Y7G20b6Ve92MMkQrmYjnO8dhErErQw+XuznP3ZrvWcx8yF9wQOEnHb2IpY6RLJQT 6u/TGkLh8H88ojUabB0ajKTer/Z6LnroAHg6PrGJyjj7sde/8DBl5Vp5pWs+8pM7vgHj n6Zg== 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:mime-version :content-transfer-encoding; bh=DxWtR7S2iGd1IVSosmOS+2mOAX3RK9cRxSsT5UQ1aIg=; b=OLTA7WaMzMvS2QPnDYeTUAoPiCRgA0geEPDnPX1gTthaJ57FuAJFzvaSslmg3zRnUI emhR5wmHX3OVdI2UKtEy8D08LPmuYnoOM4tzSYrEm3OnLzFSl5JqBdha1xUD2rLgJfA2 y6IPZYIqoUcu+56DzcNJXzBhYaWOE2ZPiPCo+07IozEjteUsFB6LhaM9NPU8dpDdVnnF Qi1YMijXvzZOikecGoHZiIPzVc1QmHcvlzrkC2dEACaW/g2ddQj3IAKHQN2t/PcDKkPB cis8ch9PKSN6e4vciGnHPbHZBWBnuYkjRBqwoa6A7AzNFIrGSligKCFkiXE+Ss5Bt3WL yeFg== X-Gm-Message-State: APjAAAWcj1Nn34WbiYmDG5KfnPXM+LjM2KMLW/pUIPFcj9GGvydQm04Y H/3ZQYwCtjnUBJXpsz/RHdlhKWOX X-Google-Smtp-Source: APXvYqxXSOOrRBxTH1BCgncZkFfTE7nFBYLK7r9EvW03uRydlEyz44XWVZ52iPJi7uBL1heNKcW3/w== X-Received: by 2002:ac8:7108:: with SMTP id z8mr2998079qto.90.1569108469223; Sat, 21 Sep 2019 16:27:49 -0700 (PDT) Received: from localhost.localdomain ([191.83.209.38]) by smtp.gmail.com with ESMTPSA id y26sm3265537qtk.22.2019.09.21.16.27.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Sep 2019 16:27:48 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 21 Sep 2019 20:27:10 -0300 Message-Id: <20190921232712.1345-1-jamrial@gmail.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/mpeg4audio: add avpriv_mpeg4audio_get_config2() 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" Identical to avpriv_mpeg4audio_get_config() except taking a size argument in bytes, and featuring a new logging context paremeter. Schedule avpriv_mpeg4audio_get_config() for removal as soon as major is bumped as well. Signed-off-by: James Almer --- libavcodec/aacdec_template.c | 2 +- libavcodec/mpeg4audio.c | 22 ++++++++++++++++++++-- libavcodec/mpeg4audio.h | 17 ++++++++++++++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 6e086e00df..8726c8b828 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -975,7 +975,7 @@ static int decode_audio_specific_config_gb(AACContext *ac, int i, ret; GetBitContext gbc = *gb; - if ((i = ff_mpeg4audio_get_config_gb(m4ac, &gbc, sync_extension)) < 0) + if ((i = ff_mpeg4audio_get_config_gb(m4ac, &gbc, sync_extension, avctx)) < 0) return AVERROR_INVALIDDATA; if (m4ac->sampling_index > 12) { diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c index 219714752f..6962a42537 100644 --- a/libavcodec/mpeg4audio.c +++ b/libavcodec/mpeg4audio.c @@ -84,7 +84,7 @@ static inline int get_sample_rate(GetBitContext *gb, int *index) } int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, - int sync_extension) + int sync_extension, void *logctx) { int specific_config_bitindex, ret; int start_bit_index = get_bits_count(gb); @@ -152,6 +152,7 @@ int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, return specific_config_bitindex - start_bit_index; } +#if LIBAVCODEC_VERSION_MAJOR < 59 int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int bit_size, int sync_extension) { @@ -165,5 +166,22 @@ int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, if (ret < 0) return ret; - return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension); + return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension, NULL); +} +#endif + +int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, + int size, int sync_extension, void *logctx) +{ + GetBitContext gb; + int ret; + + if (size <= 0) + return AVERROR_INVALIDDATA; + + ret = init_get_bits8(&gb, buf, size); + if (ret < 0) + return ret; + + return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension, logctx); } diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h index b9cea8af17..00aa680c13 100644 --- a/libavcodec/mpeg4audio.h +++ b/libavcodec/mpeg4audio.h @@ -53,11 +53,13 @@ extern const uint8_t ff_mpeg4audio_channels[8]; * @param[in] c MPEG4AudioConfig structure to fill. * @param[in] gb Extradata from container. * @param[in] sync_extension look for a sync extension after config if true. + * @param[in] logctx opaque struct starting with an AVClass element, used for logging. * @return On error -1 is returned, on success AudioSpecificConfig bit index in extradata. */ int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, - int sync_extension); + int sync_extension, void *logctx); +#if LIBAVCODEC_VERSION_MAJOR < 59 /** * Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration. * @param[in] c MPEG4AudioConfig structure to fill. @@ -68,6 +70,19 @@ int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, */ int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int bit_size, int sync_extension); +#endif + +/** + * Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration. + * @param[in] c MPEG4AudioConfig structure to fill. + * @param[in] buf Extradata from container. + * @param[in] size Extradata size in bytes. + * @param[in] sync_extension look for a sync extension after config if true. + * @param[in] logctx opaque struct starting with an AVClass element, used for logging. + * @return negative AVERROR code on error, AudioSpecificConfig bit index in extradata on success. + */ +int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, + int size, int sync_extension, void *logctx); enum AudioObjectType { AOT_NULL,