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
