Quoting Diego Biurrun (2016-06-09 17:12:57)
> From: Alexandra Hájková <[email protected]>
> 
> ---
>  libavformat/rtpdec_h261.c         | 19 ++++++++++---------
>  libavformat/rtpdec_h263_rfc2190.c | 19 ++++++++++---------
>  libavformat/rtpdec_latm.c         | 24 +++++++++++++-----------
>  libavformat/rtpdec_mpeg4.c        | 16 +++++++++-------
>  libavformat/rtpdec_qt.c           | 31 ++++++++++++++++---------------
>  libavformat/rtpenc_h263_rfc2190.c | 29 +++++++++++++++--------------
>  6 files changed, 73 insertions(+), 65 deletions(-)
> 
> diff --git a/libavformat/rtpdec_h261.c b/libavformat/rtpdec_h261.c
> index 00086c2..b1bd1e0 100644
> --- a/libavformat/rtpdec_h261.c
> +++ b/libavformat/rtpdec_h261.c
> @@ -19,7 +19,8 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
>   */
>  
> -#include "libavcodec/get_bits.h"
> +#include "libavcodec/bitstream.h"
> +
>  #include "avformat.h"
>  #include "avio_internal.h"
>  #include "rtpdec_formats.h"
> @@ -118,18 +119,18 @@ static int h261_handle_packet(AVFormatContext *ctx, 
> PayloadContext *rtp_h261_ctx
>              avio_w8(rtp_h261_ctx->buf, rtp_h261_ctx->endbyte);
>          } else {
>              /* ebit/sbit values inconsistent, assuming packet loss */
> -            GetBitContext gb;
> -            init_get_bits(&gb, buf, len*8 - ebit);
> -            skip_bits(&gb, sbit);
> +            BitstreamContext bc;
> +            bitstream_init(&bc, buf, len * 8 - ebit);
> +            bitstream_skip(&bc, sbit);
>              if (rtp_h261_ctx->endbyte_bits) {
> -                rtp_h261_ctx->endbyte |= get_bits(&gb, 8 - 
> rtp_h261_ctx->endbyte_bits);
> +                rtp_h261_ctx->endbyte |= bitstream_read(&bc, 8 - 
> rtp_h261_ctx->endbyte_bits);
>                  avio_w8(rtp_h261_ctx->buf, rtp_h261_ctx->endbyte);
>              }
> -            while (get_bits_left(&gb) >= 8)
> -                avio_w8(rtp_h261_ctx->buf, get_bits(&gb, 8));
> -            rtp_h261_ctx->endbyte_bits = get_bits_left(&gb);
> +            while (bitstream_bits_left(&bc) >= 8)
> +                avio_w8(rtp_h261_ctx->buf, bitstream_read(&bc, 8));
> +            rtp_h261_ctx->endbyte_bits = bitstream_bits_left(&bc);
>              if (rtp_h261_ctx->endbyte_bits)
> -                rtp_h261_ctx->endbyte = get_bits(&gb, 
> rtp_h261_ctx->endbyte_bits) <<
> +                rtp_h261_ctx->endbyte = bitstream_read(&bc, 
> rtp_h261_ctx->endbyte_bits) <<
>                                          (8 - rtp_h261_ctx->endbyte_bits);
>              ebit = 0;
>              len  = 0;
> diff --git a/libavformat/rtpdec_h263_rfc2190.c 
> b/libavformat/rtpdec_h263_rfc2190.c
> index 019eea7..5744d71 100644
> --- a/libavformat/rtpdec_h263_rfc2190.c
> +++ b/libavformat/rtpdec_h263_rfc2190.c
> @@ -30,7 +30,8 @@
>  #include "rtpdec_formats.h"
>  #include "libavutil/attributes.h"
>  #include "libavutil/intreadwrite.h"
> -#include "libavcodec/get_bits.h"
> +
> +#include "libavcodec/bitstream.h"
>  
>  struct PayloadContext {
>      AVIOContext *buf;
> @@ -141,18 +142,18 @@ static int h263_handle_packet(AVFormatContext *ctx, 
> PayloadContext *data,
>              avio_w8(data->buf, data->endbyte);
>          } else {
>              /* Start/end skip bits not matching - missed packets? */
> -            GetBitContext gb;
> -            init_get_bits(&gb, buf, len*8 - ebit);
> -            skip_bits(&gb, sbit);
> +            BitstreamContext bc;
> +            bitstream_init(&bc, buf, len * 8 - ebit);
> +            bitstream_skip(&bc, sbit);
>              if (data->endbyte_bits) {
> -                data->endbyte |= get_bits(&gb, 8 - data->endbyte_bits);
> +                data->endbyte |= bitstream_read(&bc, 8 - data->endbyte_bits);
>                  avio_w8(data->buf, data->endbyte);
>              }
> -            while (get_bits_left(&gb) >= 8)
> -                avio_w8(data->buf, get_bits(&gb, 8));
> -            data->endbyte_bits = get_bits_left(&gb);
> +            while (bitstream_bits_left(&bc) >= 8)
> +                avio_w8(data->buf, bitstream_read(&bc, 8));
> +            data->endbyte_bits = bitstream_bits_left(&bc);
>              if (data->endbyte_bits)
> -                data->endbyte = get_bits(&gb, data->endbyte_bits) <<
> +                data->endbyte = bitstream_read(&bc, data->endbyte_bits) <<
>                                  (8 - data->endbyte_bits);
>              ebit = 0;
>              len = 0;
> diff --git a/libavformat/rtpdec_latm.c b/libavformat/rtpdec_latm.c
> index 6be0a25..3f1c9d5 100644
> --- a/libavformat/rtpdec_latm.c
> +++ b/libavformat/rtpdec_latm.c
> @@ -19,11 +19,13 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
>   */
>  
> +#include "libavutil/avstring.h"
> +
> +#include "libavcodec/bitstream.h"
> +
>  #include "avio_internal.h"
>  #include "rtpdec_formats.h"
>  #include "internal.h"
> -#include "libavutil/avstring.h"
> -#include "libavcodec/get_bits.h"
>  
>  struct PayloadContext {
>      AVIOContext *dyn_buf;
> @@ -92,7 +94,7 @@ static int latm_parse_packet(AVFormatContext *ctx, 
> PayloadContext *data,
>  static int parse_fmtp_config(AVStream *st, const char *value)
>  {
>      int len = ff_hex_to_data(NULL, value), i, ret = 0;
> -    GetBitContext gb;
> +    BitstreamContext bc;
>      uint8_t *config;
>      int audio_mux_version, same_time_framing, num_programs, num_layers;
>  
> @@ -101,12 +103,12 @@ static int parse_fmtp_config(AVStream *st, const char 
> *value)
>      if (!config)
>          return AVERROR(ENOMEM);
>      ff_hex_to_data(config, value);
> -    init_get_bits(&gb, config, len*8);
> -    audio_mux_version = get_bits(&gb, 1);
> -    same_time_framing = get_bits(&gb, 1);
> -    skip_bits(&gb, 6); /* num_sub_frames */
> -    num_programs      = get_bits(&gb, 4);
> -    num_layers        = get_bits(&gb, 3);
> +    bitstream_init(&bc, config, len * 8);
> +    audio_mux_version = bitstream_read(&bc, 1);
> +    same_time_framing = bitstream_read(&bc, 1);
> +    bitstream_skip(&bc, 6); /* num_sub_frames */
> +    num_programs      = bitstream_read(&bc, 4);
> +    num_layers        = bitstream_read(&bc, 3);
>      if (audio_mux_version != 0 || same_time_framing != 1 || num_programs != 
> 0 ||
>          num_layers != 0) {
>          av_log(NULL, AV_LOG_WARNING, "Unsupported LATM config 
> (%d,%d,%d,%d)\n",
> @@ -116,7 +118,7 @@ static int parse_fmtp_config(AVStream *st, const char 
> *value)
>          goto end;
>      }
>      av_freep(&st->codecpar->extradata);
> -    st->codecpar->extradata_size = (get_bits_left(&gb) + 7)/8;
> +    st->codecpar->extradata_size = (bitstream_bits_left(&bc) + 7) / 8;
>      st->codecpar->extradata = av_mallocz(st->codecpar->extradata_size +
>                                           AV_INPUT_BUFFER_PADDING_SIZE);
>      if (!st->codecpar->extradata) {
> @@ -124,7 +126,7 @@ static int parse_fmtp_config(AVStream *st, const char 
> *value)
>          goto end;
>      }
>      for (i = 0; i < st->codecpar->extradata_size; i++)
> -        st->codecpar->extradata[i] = get_bits(&gb, 8);
> +        st->codecpar->extradata[i] = bitstream_read(&bc, 8);
>  
>  end:
>      av_free(config);
> diff --git a/libavformat/rtpdec_mpeg4.c b/libavformat/rtpdec_mpeg4.c
> index d5fea4f..8542404 100644
> --- a/libavformat/rtpdec_mpeg4.c
> +++ b/libavformat/rtpdec_mpeg4.c
> @@ -27,11 +27,13 @@
>   * @author Romain Degez
>   */
>  
> -#include "rtpdec_formats.h"
> -#include "internal.h"
>  #include "libavutil/attributes.h"
>  #include "libavutil/avstring.h"
> -#include "libavcodec/get_bits.h"
> +
> +#include "libavcodec/bitstream.h"
> +
> +#include "rtpdec_formats.h"
> +#include "internal.h"
>  
>  #define MAX_AAC_HBR_FRAME_SIZE 8191
>  
> @@ -113,7 +115,7 @@ static int parse_fmtp_config(AVCodecParameters *par, char 
> *value)
>  static int rtp_parse_mp4_au(PayloadContext *data, const uint8_t *buf, int 
> len)
>  {
>      int au_headers_length, au_header_size, i;
> -    GetBitContext getbitcontext;
> +    BitstreamContext bctx;
>  
>      if (len < 2)
>          return AVERROR_INVALIDDATA;
> @@ -134,7 +136,7 @@ static int rtp_parse_mp4_au(PayloadContext *data, const 
> uint8_t *buf, int len)
>      if (len < data->au_headers_length_bytes)
>          return AVERROR_INVALIDDATA;
>  
> -    init_get_bits(&getbitcontext, buf, data->au_headers_length_bytes * 8);
> +    bitstream_init(&bctx, buf, data->au_headers_length_bytes * 8);
>  
>      /* XXX: Wrong if optional additional sections are present (cts, dts 
> etc...) */
>      au_header_size = data->sizelength + data->indexlength;
> @@ -151,8 +153,8 @@ static int rtp_parse_mp4_au(PayloadContext *data, const 
> uint8_t *buf, int len)
>      }
>  
>      for (i = 0; i < data->nb_au_headers; ++i) {
> -        data->au_headers[i].size  = get_bits_long(&getbitcontext, 
> data->sizelength);
> -        data->au_headers[i].index = get_bits_long(&getbitcontext, 
> data->indexlength);
> +        data->au_headers[i].size  = bitstream_read(&bctx, data->sizelength);
> +        data->au_headers[i].index = bitstream_read(&bctx, data->indexlength);

What guarantees that the sizes are bounded by 32?

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to