diff mbox series

[FFmpeg-devel] libavcodec/adts_header: add frame_length field and avpriv function to parse AAC ADTS header

Message ID SG2PR01MB26938B7FA0CA32D2C0DB5411F20D0@SG2PR01MB2693.apcprd01.prod.exchangelabs.com
State Superseded
Headers show
Series [FFmpeg-devel] libavcodec/adts_header: add frame_length field and avpriv function to parse AAC ADTS header | expand

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Nachiket Tarate Oct. 6, 2020, 2:30 p.m. UTC
These will be used by HLS demuxer for SAMPLE-AES decryption.

Signed-off-by: Nachiket Tarate <nachiket.tarate@outlook.com>
---
 libavcodec/adts_header.c | 18 ++++++++++++++++++
 libavcodec/adts_header.h |  4 ++++
 2 files changed, 22 insertions(+)

Comments

James Almer Oct. 6, 2020, 3:17 p.m. UTC | #1
On 10/6/2020 11:30 AM, Nachiket Tarate wrote:
> These will be used by HLS demuxer for SAMPLE-AES decryption.
> 
> Signed-off-by: Nachiket Tarate <nachiket.tarate@outlook.com>
> ---
>  libavcodec/adts_header.c | 18 ++++++++++++++++++
>  libavcodec/adts_header.h |  4 ++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/libavcodec/adts_header.c b/libavcodec/adts_header.c
> index 0889820f8a..006455b110 100644
> --- a/libavcodec/adts_header.c
> +++ b/libavcodec/adts_header.c
> @@ -3,6 +3,7 @@
>   * Copyright (c) 2003 Fabrice Bellard
>   * Copyright (c) 2003 Michael Niedermayer
>   * Copyright (c) 2009 Alex Converse
> + * Copyright (c) 2020 Nachiket Tarate
>   *
>   * This file is part of FFmpeg.
>   *
> @@ -66,6 +67,23 @@ int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
>      hdr->sample_rate    = avpriv_mpeg4audio_sample_rates[sr];
>      hdr->samples        = (rdb + 1) * 1024;
>      hdr->bit_rate       = size * 8 * hdr->sample_rate / hdr->samples;
> +    hdr->frame_length	= size;
>  
>      return size;
>  }
> +
> +int avpriv_adts_header_parse (AACADTSHeaderInfo *hdr, const uint8_t *buf, size_t size)

You're making sizeof(AACADTSHeaderInfo) part of the ABI this way, which
is not desirable. If you look at avpriv_ac3_parse_header(), it takes a
pointer to pointer to AC3HeaderInfo, and allocates it if needed.

Also, you should instead add this function to adts_parser.c and make it
return AVERROR(ENOSYS) when CONFIG_ADTS_HEADER is 0. This is done so the
symbol is always present even when the functionality is not.

I assume you're adding this function because you need AACADTSHeaderInfo
fields that av_adts_header_parse() alone does not provide, like
frame_length?

> +{
> +    int ret = 0;
> +    GetBitContext gb;
> +    if (size < AV_AAC_ADTS_HEADER_SIZE)
> +        return AVERROR_INVALIDDATA;
> +    ret = init_get_bits8(&gb, buf, AV_AAC_ADTS_HEADER_SIZE);
> +    if (ret < 0)
> +        return ret;
> +    ret = ff_adts_header_parse(&gb, hdr);
> +    if (ret < 0)
> +        return ret;
> +    return 0;
> +}
> +
> diff --git a/libavcodec/adts_header.h b/libavcodec/adts_header.h
> index f615f6a9f9..d33bd61818 100644
> --- a/libavcodec/adts_header.h
> +++ b/libavcodec/adts_header.h
> @@ -2,6 +2,7 @@
>   * AAC ADTS header decoding prototypes and structures
>   * Copyright (c) 2003 Fabrice Bellard
>   * Copyright (c) 2003 Michael Niedermayer
> + * Copyright (c) 2020 Nachiket Tarate
>   *
>   * This file is part of FFmpeg.
>   *
> @@ -34,6 +35,7 @@ typedef struct AACADTSHeaderInfo {
>      uint8_t  sampling_index;
>      uint8_t  chan_config;
>      uint8_t  num_aac_frames;
> +    uint32_t frame_length;
>  } AACADTSHeaderInfo;
>  
>  /**
> @@ -47,4 +49,6 @@ typedef struct AACADTSHeaderInfo {
>   */
>  int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr);
>  
> +int avpriv_adts_header_parse (AACADTSHeaderInfo *hdr, const uint8_t *buf, size_t size);
> +
>  #endif /* AVCODEC_ADTS_HEADER_H */
>
diff mbox series

Patch

diff --git a/libavcodec/adts_header.c b/libavcodec/adts_header.c
index 0889820f8a..006455b110 100644
--- a/libavcodec/adts_header.c
+++ b/libavcodec/adts_header.c
@@ -3,6 +3,7 @@ 
  * Copyright (c) 2003 Fabrice Bellard
  * Copyright (c) 2003 Michael Niedermayer
  * Copyright (c) 2009 Alex Converse
+ * Copyright (c) 2020 Nachiket Tarate
  *
  * This file is part of FFmpeg.
  *
@@ -66,6 +67,23 @@  int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
     hdr->sample_rate    = avpriv_mpeg4audio_sample_rates[sr];
     hdr->samples        = (rdb + 1) * 1024;
     hdr->bit_rate       = size * 8 * hdr->sample_rate / hdr->samples;
+    hdr->frame_length	= size;
 
     return size;
 }
+
+int avpriv_adts_header_parse (AACADTSHeaderInfo *hdr, const uint8_t *buf, size_t size)
+{
+    int ret = 0;
+    GetBitContext gb;
+    if (size < AV_AAC_ADTS_HEADER_SIZE)
+        return AVERROR_INVALIDDATA;
+    ret = init_get_bits8(&gb, buf, AV_AAC_ADTS_HEADER_SIZE);
+    if (ret < 0)
+        return ret;
+    ret = ff_adts_header_parse(&gb, hdr);
+    if (ret < 0)
+        return ret;
+    return 0;
+}
+
diff --git a/libavcodec/adts_header.h b/libavcodec/adts_header.h
index f615f6a9f9..d33bd61818 100644
--- a/libavcodec/adts_header.h
+++ b/libavcodec/adts_header.h
@@ -2,6 +2,7 @@ 
  * AAC ADTS header decoding prototypes and structures
  * Copyright (c) 2003 Fabrice Bellard
  * Copyright (c) 2003 Michael Niedermayer
+ * Copyright (c) 2020 Nachiket Tarate
  *
  * This file is part of FFmpeg.
  *
@@ -34,6 +35,7 @@  typedef struct AACADTSHeaderInfo {
     uint8_t  sampling_index;
     uint8_t  chan_config;
     uint8_t  num_aac_frames;
+    uint32_t frame_length;
 } AACADTSHeaderInfo;
 
 /**
@@ -47,4 +49,6 @@  typedef struct AACADTSHeaderInfo {
  */
 int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr);
 
+int avpriv_adts_header_parse (AACADTSHeaderInfo *hdr, const uint8_t *buf, size_t size);
+
 #endif /* AVCODEC_ADTS_HEADER_H */