[009/115] mpeg4audio: Convert to the new bitstream reader

Message ID 1465485217-7678-10-git-send-email-diego@biurrun.de
State Superseded
Headers show

Commit Message

Diego Biurrun June 9, 2016, 3:11 p.m.
From: Alexandra Hájková <alexandra@khirnov.net>

---
 libavcodec/mpeg4audio.c | 118 ++++++++++++++++++++++++------------------------
 libavcodec/mpeg4audio.h |   5 +-
 2 files changed, 62 insertions(+), 61 deletions(-)

Comments

Anton Khirnov June 13, 2016, 6:12 p.m. | #1
Quoting Diego Biurrun (2016-06-09 17:11:51)
> From: Alexandra Hájková <alexandra@khirnov.net>
> 
> ---
>  libavcodec/mpeg4audio.c | 118 ++++++++++++++++++++++++------------------------
>  libavcodec/mpeg4audio.h |   5 +-
>  2 files changed, 62 insertions(+), 61 deletions(-)
> 
> diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c
> index 2363cb6..8ac8da9 100644
> --- a/libavcodec/mpeg4audio.c
> +++ b/libavcodec/mpeg4audio.c
> @@ -20,34 +20,34 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> -#include "get_bits.h"
> +#include "bitstream.h"
>  #include "put_bits.h"
>  #include "mpeg4audio.h"
>  
>  /**
>   * Parse MPEG-4 audio configuration for ALS object type.
> - * @param[in] gb       bit reader context
> + * @param[in] bc       bit reader context
>   * @param[in] c        MPEG4AudioConfig structure to fill
>   * @return on success 0 is returned, otherwise a value < 0
>   */
> -static int parse_config_ALS(GetBitContext *gb, MPEG4AudioConfig *c)
> +static int parse_config_ALS(BitstreamContext *bc, MPEG4AudioConfig *c)
>  {
> -    if (get_bits_left(gb) < 112)
> +    if (bitstream_bits_left(bc) < 112)
>          return -1;
>  
> -    if (get_bits_long(gb, 32) != MKBETAG('A','L','S','\0'))
> +    if (bitstream_read(bc, 32) != MKBETAG('A','L','S','\0'))
>          return -1;
>  
>      // override AudioSpecificConfig channel configuration and sample rate
>      // which are buggy in old ALS conformance files
> -    c->sample_rate = get_bits_long(gb, 32);
> +    c->sample_rate = bitstream_read(bc, 32);
>  
>      // skip number of samples
> -    skip_bits_long(gb, 32);
> +    bitstream_skip(bc, 32);
>  
>      // read number of channels
>      c->chan_config = 0;
> -    c->channels    = get_bits(gb, 16) + 1;
> +    c->channels    = bitstream_read(bc, 16) + 1;
>  
>      return 0;
>  }
> @@ -61,77 +61,77 @@ const uint8_t ff_mpeg4audio_channels[8] = {
>      0, 1, 2, 3, 4, 5, 6, 8
>  };
>  
> -static inline int get_object_type(GetBitContext *gb)
> +static inline int get_object_type(BitstreamContext *bc)
>  {
> -    int object_type = get_bits(gb, 5);
> +    int object_type = bitstream_read(bc, 5);
>      if (object_type == AOT_ESCAPE)
> -        object_type = 32 + get_bits(gb, 6);
> +        object_type = 32 + bitstream_read(bc, 6);
>      return object_type;
>  }
>  
> -static inline int get_sample_rate(GetBitContext *gb, int *index)
> +static inline int get_sample_rate(BitstreamContext *bc, int *index)
>  {
> -    *index = get_bits(gb, 4);
> -    return *index == 0x0f ? get_bits(gb, 24) :
> +    *index = bitstream_read(bc, 4);
> +    return *index == 0x0f ? bitstream_read(bc, 24) :
>          avpriv_mpeg4audio_sample_rates[*index];
>  }
>  
>  int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf,
>                                   int bit_size, int sync_extension)
>  {
> -    GetBitContext gb;
> +    BitstreamContext bc;
>      int specific_config_bitindex, ret;
>  
> -    ret = init_get_bits(&gb, buf, bit_size);
> +    ret = bitstream_init(&bc, buf, bit_size);
>      if (ret < 0)
>          return ret;
> -    c->object_type = get_object_type(&gb);
> -    c->sample_rate = get_sample_rate(&gb, &c->sampling_index);
> -    c->chan_config = get_bits(&gb, 4);
> +    c->object_type = get_object_type(&bc);
> +    c->sample_rate = get_sample_rate(&bc, &c->sampling_index);
> +    c->chan_config = bitstream_read(&bc, 4);
>      if (c->chan_config < FF_ARRAY_ELEMS(ff_mpeg4audio_channels))
>          c->channels = ff_mpeg4audio_channels[c->chan_config];
>      c->sbr = -1;
>      c->ps  = -1;
>      if (c->object_type == AOT_SBR || (c->object_type == AOT_PS &&
>          // check for W6132 Annex YYYY draft MP3onMP4
> -        !(show_bits(&gb, 3) & 0x03 && !(show_bits(&gb, 9) & 0x3F)))) {
> +        !(bitstream_peek(&bc, 3) & 0x03 && !(bitstream_peek(&bc, 9) & 0x3F)))) {
>          if (c->object_type == AOT_PS)
>              c->ps = 1;
>          c->ext_object_type = AOT_SBR;
>          c->sbr = 1;
> -        c->ext_sample_rate = get_sample_rate(&gb, &c->ext_sampling_index);
> -        c->object_type = get_object_type(&gb);
> +        c->ext_sample_rate = get_sample_rate(&bc, &c->ext_sampling_index);
> +        c->object_type = get_object_type(&bc);
>          if (c->object_type == AOT_ER_BSAC)
> -            c->ext_chan_config = get_bits(&gb, 4);
> +            c->ext_chan_config = bitstream_read(&bc, 4);
>      } else {
>          c->ext_object_type = AOT_NULL;
>          c->ext_sample_rate = 0;
>      }
> -    specific_config_bitindex = get_bits_count(&gb);
> +    specific_config_bitindex = bitstream_tell(&bc);
>  
>      if (c->object_type == AOT_ALS) {
> -        skip_bits(&gb, 5);
> -        if (show_bits_long(&gb, 24) != MKBETAG('\0','A','L','S'))
> -            skip_bits_long(&gb, 24);
> +        bitstream_skip(&bc, 5);
> +        if (bitstream_peek(&bc, 24) != MKBETAG('\0','A','L','S'))
> +            bitstream_skip(&bc, 24);
>  
> -        specific_config_bitindex = get_bits_count(&gb);
> +        specific_config_bitindex = bitstream_tell(&bc);
>  
> -        if (parse_config_ALS(&gb, c))
> +        if (parse_config_ALS(&bc, c))
>              return -1;
>      }
>  
>      if (c->ext_object_type != AOT_SBR && sync_extension) {
> -        while (get_bits_left(&gb) > 15) {
> -            if (show_bits(&gb, 11) == 0x2b7) { // sync extension
> -                get_bits(&gb, 11);
> -                c->ext_object_type = get_object_type(&gb);
> -                if (c->ext_object_type == AOT_SBR && (c->sbr = get_bits1(&gb)) == 1)
> -                    c->ext_sample_rate = get_sample_rate(&gb, &c->ext_sampling_index);
> -                if (get_bits_left(&gb) > 11 && get_bits(&gb, 11) == 0x548)
> -                    c->ps = get_bits1(&gb);
> +        while (bitstream_bits_left(&bc) > 15) {
> +            if (bitstream_peek(&bc, 11) == 0x2b7) { // sync extension
> +                bitstream_read(&bc, 11);
> +                c->ext_object_type = get_object_type(&bc);
> +                if (c->ext_object_type == AOT_SBR && (c->sbr = bitstream_read_bit(&bc)) == 1)
> +                    c->ext_sample_rate = get_sample_rate(&bc, &c->ext_sampling_index);
> +                if (bitstream_bits_left(&bc) > 11 && bitstream_read(&bc, 11) == 0x548)
> +                    c->ps = bitstream_read_bit(&bc);
>                  break;
>              } else
> -                get_bits1(&gb); // skip 1 bit
> +                bitstream_read_bit(&bc); // skip 1 bit
>          }
>      }
>  
> @@ -146,41 +146,41 @@ int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf,
>  }
>  
>  static av_always_inline unsigned int copy_bits(PutBitContext *pb,
> -                                               GetBitContext *gb,
> +                                               BitstreamContext *bc,
>                                                 int bits)
>  {
> -    unsigned int el = get_bits(gb, bits);
> +    unsigned int el = bitstream_read(bc, bits);
>      put_bits(pb, bits, el);
>      return el;
>  }
>  
> -int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb)
> +int avpriv_copy_pce_data(PutBitContext *pb, BitstreamContext *bc)
>  {
>      int five_bit_ch, four_bit_ch, comment_size, bits;
>      int offset = put_bits_count(pb);
>  
> -    copy_bits(pb, gb, 10);                  //Tag, Object Type, Frequency
> -    five_bit_ch  = copy_bits(pb, gb, 4);    //Front
> -    five_bit_ch += copy_bits(pb, gb, 4);    //Side
> -    five_bit_ch += copy_bits(pb, gb, 4);    //Back
> -    four_bit_ch  = copy_bits(pb, gb, 2);    //LFE
> -    four_bit_ch += copy_bits(pb, gb, 3);    //Data
> -    five_bit_ch += copy_bits(pb, gb, 4);    //Coupling
> -    if (copy_bits(pb, gb, 1))               //Mono Mixdown
> -        copy_bits(pb, gb, 4);
> -    if (copy_bits(pb, gb, 1))               //Stereo Mixdown
> -        copy_bits(pb, gb, 4);
> -    if (copy_bits(pb, gb, 1))               //Matrix Mixdown
> -        copy_bits(pb, gb, 3);
> +    copy_bits(pb, bc, 10);                  //Tag, Object Type, Frequency
> +    five_bit_ch  = copy_bits(pb, bc, 4);    //Front
> +    five_bit_ch += copy_bits(pb, bc, 4);    //Side
> +    five_bit_ch += copy_bits(pb, bc, 4);    //Back
> +    four_bit_ch  = copy_bits(pb, bc, 2);    //LFE
> +    four_bit_ch += copy_bits(pb, bc, 3);    //Data
> +    five_bit_ch += copy_bits(pb, bc, 4);    //Coupling
> +    if (copy_bits(pb, bc, 1))               //Mono Mixdown
> +        copy_bits(pb, bc, 4);
> +    if (copy_bits(pb, bc, 1))               //Stereo Mixdown
> +        copy_bits(pb, bc, 4);
> +    if (copy_bits(pb, bc, 1))               //Matrix Mixdown
> +        copy_bits(pb, bc, 3);
>      for (bits = five_bit_ch*5+four_bit_ch*4; bits > 16; bits -= 16)
> -        copy_bits(pb, gb, 16);
> +        copy_bits(pb, bc, 16);
>      if (bits)
> -        copy_bits(pb, gb, bits);
> +        copy_bits(pb, bc, bits);
>      avpriv_align_put_bits(pb);
> -    align_get_bits(gb);
> -    comment_size = copy_bits(pb, gb, 8);
> +    bitstream_align(bc);
> +    comment_size = copy_bits(pb, bc, 8);
>      for (; comment_size > 0; comment_size--)
> -        copy_bits(pb, gb, 8);
> +        copy_bits(pb, bc, 8);
>  
>      return put_bits_count(pb) - offset;
>  }
> diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h
> index 2eef220..fc25767 100644
> --- a/libavcodec/mpeg4audio.h
> +++ b/libavcodec/mpeg4audio.h
> @@ -23,7 +23,8 @@
>  #define AVCODEC_MPEG4AUDIO_H
>  
>  #include <stdint.h>
> -#include "get_bits.h"
> +
> +#include "bitstream.h"
>  #include "put_bits.h"
>  
>  typedef struct MPEG4AudioConfig {
> @@ -105,6 +106,6 @@ enum AudioObjectType {
>  #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE
>                           ///<marker and the comment
>  
> -int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb);
> +int avpriv_copy_pce_data(PutBitContext *pb, BitstreamContext *bc);

This patch changes this function's signature, but not its callers. None
of them (adtsenc, latmenc and adtstoasc_bsf) seems to be tested by FATE.

Also, since this function is shared between libraries, this change is a
potential ABI problem.
Diego Biurrun June 23, 2016, 4:53 p.m. | #2
On Mon, Jun 13, 2016 at 08:12:15PM +0200, Anton Khirnov wrote:
> Quoting Diego Biurrun (2016-06-09 17:11:51)
> > --- a/libavcodec/mpeg4audio.c
> > +++ b/libavcodec/mpeg4audio.c
> > --- a/libavcodec/mpeg4audio.h
> > +++ b/libavcodec/mpeg4audio.h
> > @@ -105,6 +106,6 @@ enum AudioObjectType {
> >  #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE
> >                           ///<marker and the comment
> >  
> > -int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb);
> > +int avpriv_copy_pce_data(PutBitContext *pb, BitstreamContext *bc);
> 
> This patch changes this function's signature, but not its callers. None
> of them (adtsenc, latmenc and adtstoasc_bsf) seems to be tested by FATE.

Yes, good catch, these commits need to be squashed together, along with
the AAC-related commits.

> Also, since this function is shared between libraries, this change is a
> potential ABI problem.

Do you have a suggestion?

Diego

Patch

diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c
index 2363cb6..8ac8da9 100644
--- a/libavcodec/mpeg4audio.c
+++ b/libavcodec/mpeg4audio.c
@@ -20,34 +20,34 @@ 
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "get_bits.h"
+#include "bitstream.h"
 #include "put_bits.h"
 #include "mpeg4audio.h"
 
 /**
  * Parse MPEG-4 audio configuration for ALS object type.
- * @param[in] gb       bit reader context
+ * @param[in] bc       bit reader context
  * @param[in] c        MPEG4AudioConfig structure to fill
  * @return on success 0 is returned, otherwise a value < 0
  */
-static int parse_config_ALS(GetBitContext *gb, MPEG4AudioConfig *c)
+static int parse_config_ALS(BitstreamContext *bc, MPEG4AudioConfig *c)
 {
-    if (get_bits_left(gb) < 112)
+    if (bitstream_bits_left(bc) < 112)
         return -1;
 
-    if (get_bits_long(gb, 32) != MKBETAG('A','L','S','\0'))
+    if (bitstream_read(bc, 32) != MKBETAG('A','L','S','\0'))
         return -1;
 
     // override AudioSpecificConfig channel configuration and sample rate
     // which are buggy in old ALS conformance files
-    c->sample_rate = get_bits_long(gb, 32);
+    c->sample_rate = bitstream_read(bc, 32);
 
     // skip number of samples
-    skip_bits_long(gb, 32);
+    bitstream_skip(bc, 32);
 
     // read number of channels
     c->chan_config = 0;
-    c->channels    = get_bits(gb, 16) + 1;
+    c->channels    = bitstream_read(bc, 16) + 1;
 
     return 0;
 }
@@ -61,77 +61,77 @@  const uint8_t ff_mpeg4audio_channels[8] = {
     0, 1, 2, 3, 4, 5, 6, 8
 };
 
-static inline int get_object_type(GetBitContext *gb)
+static inline int get_object_type(BitstreamContext *bc)
 {
-    int object_type = get_bits(gb, 5);
+    int object_type = bitstream_read(bc, 5);
     if (object_type == AOT_ESCAPE)
-        object_type = 32 + get_bits(gb, 6);
+        object_type = 32 + bitstream_read(bc, 6);
     return object_type;
 }
 
-static inline int get_sample_rate(GetBitContext *gb, int *index)
+static inline int get_sample_rate(BitstreamContext *bc, int *index)
 {
-    *index = get_bits(gb, 4);
-    return *index == 0x0f ? get_bits(gb, 24) :
+    *index = bitstream_read(bc, 4);
+    return *index == 0x0f ? bitstream_read(bc, 24) :
         avpriv_mpeg4audio_sample_rates[*index];
 }
 
 int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf,
                                  int bit_size, int sync_extension)
 {
-    GetBitContext gb;
+    BitstreamContext bc;
     int specific_config_bitindex, ret;
 
-    ret = init_get_bits(&gb, buf, bit_size);
+    ret = bitstream_init(&bc, buf, bit_size);
     if (ret < 0)
         return ret;
-    c->object_type = get_object_type(&gb);
-    c->sample_rate = get_sample_rate(&gb, &c->sampling_index);
-    c->chan_config = get_bits(&gb, 4);
+    c->object_type = get_object_type(&bc);
+    c->sample_rate = get_sample_rate(&bc, &c->sampling_index);
+    c->chan_config = bitstream_read(&bc, 4);
     if (c->chan_config < FF_ARRAY_ELEMS(ff_mpeg4audio_channels))
         c->channels = ff_mpeg4audio_channels[c->chan_config];
     c->sbr = -1;
     c->ps  = -1;
     if (c->object_type == AOT_SBR || (c->object_type == AOT_PS &&
         // check for W6132 Annex YYYY draft MP3onMP4
-        !(show_bits(&gb, 3) & 0x03 && !(show_bits(&gb, 9) & 0x3F)))) {
+        !(bitstream_peek(&bc, 3) & 0x03 && !(bitstream_peek(&bc, 9) & 0x3F)))) {
         if (c->object_type == AOT_PS)
             c->ps = 1;
         c->ext_object_type = AOT_SBR;
         c->sbr = 1;
-        c->ext_sample_rate = get_sample_rate(&gb, &c->ext_sampling_index);
-        c->object_type = get_object_type(&gb);
+        c->ext_sample_rate = get_sample_rate(&bc, &c->ext_sampling_index);
+        c->object_type = get_object_type(&bc);
         if (c->object_type == AOT_ER_BSAC)
-            c->ext_chan_config = get_bits(&gb, 4);
+            c->ext_chan_config = bitstream_read(&bc, 4);
     } else {
         c->ext_object_type = AOT_NULL;
         c->ext_sample_rate = 0;
     }
-    specific_config_bitindex = get_bits_count(&gb);
+    specific_config_bitindex = bitstream_tell(&bc);
 
     if (c->object_type == AOT_ALS) {
-        skip_bits(&gb, 5);
-        if (show_bits_long(&gb, 24) != MKBETAG('\0','A','L','S'))
-            skip_bits_long(&gb, 24);
+        bitstream_skip(&bc, 5);
+        if (bitstream_peek(&bc, 24) != MKBETAG('\0','A','L','S'))
+            bitstream_skip(&bc, 24);
 
-        specific_config_bitindex = get_bits_count(&gb);
+        specific_config_bitindex = bitstream_tell(&bc);
 
-        if (parse_config_ALS(&gb, c))
+        if (parse_config_ALS(&bc, c))
             return -1;
     }
 
     if (c->ext_object_type != AOT_SBR && sync_extension) {
-        while (get_bits_left(&gb) > 15) {
-            if (show_bits(&gb, 11) == 0x2b7) { // sync extension
-                get_bits(&gb, 11);
-                c->ext_object_type = get_object_type(&gb);
-                if (c->ext_object_type == AOT_SBR && (c->sbr = get_bits1(&gb)) == 1)
-                    c->ext_sample_rate = get_sample_rate(&gb, &c->ext_sampling_index);
-                if (get_bits_left(&gb) > 11 && get_bits(&gb, 11) == 0x548)
-                    c->ps = get_bits1(&gb);
+        while (bitstream_bits_left(&bc) > 15) {
+            if (bitstream_peek(&bc, 11) == 0x2b7) { // sync extension
+                bitstream_read(&bc, 11);
+                c->ext_object_type = get_object_type(&bc);
+                if (c->ext_object_type == AOT_SBR && (c->sbr = bitstream_read_bit(&bc)) == 1)
+                    c->ext_sample_rate = get_sample_rate(&bc, &c->ext_sampling_index);
+                if (bitstream_bits_left(&bc) > 11 && bitstream_read(&bc, 11) == 0x548)
+                    c->ps = bitstream_read_bit(&bc);
                 break;
             } else
-                get_bits1(&gb); // skip 1 bit
+                bitstream_read_bit(&bc); // skip 1 bit
         }
     }
 
@@ -146,41 +146,41 @@  int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf,
 }
 
 static av_always_inline unsigned int copy_bits(PutBitContext *pb,
-                                               GetBitContext *gb,
+                                               BitstreamContext *bc,
                                                int bits)
 {
-    unsigned int el = get_bits(gb, bits);
+    unsigned int el = bitstream_read(bc, bits);
     put_bits(pb, bits, el);
     return el;
 }
 
-int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb)
+int avpriv_copy_pce_data(PutBitContext *pb, BitstreamContext *bc)
 {
     int five_bit_ch, four_bit_ch, comment_size, bits;
     int offset = put_bits_count(pb);
 
-    copy_bits(pb, gb, 10);                  //Tag, Object Type, Frequency
-    five_bit_ch  = copy_bits(pb, gb, 4);    //Front
-    five_bit_ch += copy_bits(pb, gb, 4);    //Side
-    five_bit_ch += copy_bits(pb, gb, 4);    //Back
-    four_bit_ch  = copy_bits(pb, gb, 2);    //LFE
-    four_bit_ch += copy_bits(pb, gb, 3);    //Data
-    five_bit_ch += copy_bits(pb, gb, 4);    //Coupling
-    if (copy_bits(pb, gb, 1))               //Mono Mixdown
-        copy_bits(pb, gb, 4);
-    if (copy_bits(pb, gb, 1))               //Stereo Mixdown
-        copy_bits(pb, gb, 4);
-    if (copy_bits(pb, gb, 1))               //Matrix Mixdown
-        copy_bits(pb, gb, 3);
+    copy_bits(pb, bc, 10);                  //Tag, Object Type, Frequency
+    five_bit_ch  = copy_bits(pb, bc, 4);    //Front
+    five_bit_ch += copy_bits(pb, bc, 4);    //Side
+    five_bit_ch += copy_bits(pb, bc, 4);    //Back
+    four_bit_ch  = copy_bits(pb, bc, 2);    //LFE
+    four_bit_ch += copy_bits(pb, bc, 3);    //Data
+    five_bit_ch += copy_bits(pb, bc, 4);    //Coupling
+    if (copy_bits(pb, bc, 1))               //Mono Mixdown
+        copy_bits(pb, bc, 4);
+    if (copy_bits(pb, bc, 1))               //Stereo Mixdown
+        copy_bits(pb, bc, 4);
+    if (copy_bits(pb, bc, 1))               //Matrix Mixdown
+        copy_bits(pb, bc, 3);
     for (bits = five_bit_ch*5+four_bit_ch*4; bits > 16; bits -= 16)
-        copy_bits(pb, gb, 16);
+        copy_bits(pb, bc, 16);
     if (bits)
-        copy_bits(pb, gb, bits);
+        copy_bits(pb, bc, bits);
     avpriv_align_put_bits(pb);
-    align_get_bits(gb);
-    comment_size = copy_bits(pb, gb, 8);
+    bitstream_align(bc);
+    comment_size = copy_bits(pb, bc, 8);
     for (; comment_size > 0; comment_size--)
-        copy_bits(pb, gb, 8);
+        copy_bits(pb, bc, 8);
 
     return put_bits_count(pb) - offset;
 }
diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h
index 2eef220..fc25767 100644
--- a/libavcodec/mpeg4audio.h
+++ b/libavcodec/mpeg4audio.h
@@ -23,7 +23,8 @@ 
 #define AVCODEC_MPEG4AUDIO_H
 
 #include <stdint.h>
-#include "get_bits.h"
+
+#include "bitstream.h"
 #include "put_bits.h"
 
 typedef struct MPEG4AudioConfig {
@@ -105,6 +106,6 @@  enum AudioObjectType {
 #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE
                          ///<marker and the comment
 
-int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb);
+int avpriv_copy_pce_data(PutBitContext *pb, BitstreamContext *bc);
 
 #endif /* AVCODEC_MPEG4AUDIO_H */