atrac3plus: Convert to the new bitstream reader

Signed-off-by: Anton Khirnov <anton@khirnov.net>
pull/117/merge
Alexandra Hájková 9 years ago committed by Anton Khirnov
parent 0272119202
commit edd4c19a78
  1. 525
      libavcodec/atrac3plus.c
  2. 7
      libavcodec/atrac3plus.h
  3. 15
      libavcodec/atrac3plusdec.c

File diff suppressed because it is too large Load Diff

@ -31,10 +31,11 @@
#include <stdint.h> #include <stdint.h>
#include "libavutil/float_dsp.h" #include "libavutil/float_dsp.h"
#include "atrac.h" #include "atrac.h"
#include "bitstream.h"
#include "avcodec.h" #include "avcodec.h"
#include "fft.h" #include "fft.h"
#include "get_bits.h"
/** Global unit sizes */ /** Global unit sizes */
#define ATRAC3P_SUBBANDS 16 ///< number of PQF subbands #define ATRAC3P_SUBBANDS 16 ///< number of PQF subbands
@ -163,13 +164,13 @@ void ff_atrac3p_init_vlcs(AVCodec *codec);
/** /**
* Decode bitstream data of a channel unit. * Decode bitstream data of a channel unit.
* *
* @param[in] gb the GetBit context * @param[in] bc the Bitstream context
* @param[in,out] ctx ptr to the channel unit context * @param[in,out] ctx ptr to the channel unit context
* @param[in] num_channels number of channels to process * @param[in] num_channels number of channels to process
* @param[in] avctx ptr to the AVCodecContext * @param[in] avctx ptr to the AVCodecContext
* @return result code: 0 = OK, otherwise - error code * @return result code: 0 = OK, otherwise - error code
*/ */
int ff_atrac3p_decode_channel_unit(GetBitContext *gb, Atrac3pChanUnitCtx *ctx, int ff_atrac3p_decode_channel_unit(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
int num_channels, AVCodecContext *avctx); int num_channels, AVCodecContext *avctx);
/** /**

@ -39,14 +39,15 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/float_dsp.h" #include "libavutil/float_dsp.h"
#include "avcodec.h" #include "avcodec.h"
#include "get_bits.h" #include "bitstream.h"
#include "internal.h" #include "internal.h"
#include "atrac.h" #include "atrac.h"
#include "atrac3plus.h" #include "atrac3plus.h"
typedef struct ATRAC3PContext { typedef struct ATRAC3PContext {
GetBitContext gb; BitstreamContext bc;
AVFloatDSPContext fdsp; AVFloatDSPContext fdsp;
DECLARE_ALIGNED(32, float, samples)[2][ATRAC3P_FRAME_SAMPLES]; ///< quantized MDCT spectrum DECLARE_ALIGNED(32, float, samples)[2][ATRAC3P_FRAME_SAMPLES]; ///< quantized MDCT spectrum
@ -334,16 +335,16 @@ static int atrac3p_decode_frame(AVCodecContext *avctx, void *data,
return ret; return ret;
} }
if ((ret = init_get_bits8(&ctx->gb, avpkt->data, avpkt->size)) < 0) if ((ret = bitstream_init8(&ctx->bc, avpkt->data, avpkt->size)) < 0)
return ret; return ret;
if (get_bits1(&ctx->gb)) { if (bitstream_read_bit(&ctx->bc)) {
av_log(avctx, AV_LOG_ERROR, "Invalid start bit!\n"); av_log(avctx, AV_LOG_ERROR, "Invalid start bit!\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
while (get_bits_left(&ctx->gb) >= 2 && while (bitstream_bits_left(&ctx->bc) >= 2 &&
(ch_unit_id = get_bits(&ctx->gb, 2)) != CH_UNIT_TERMINATOR) { (ch_unit_id = bitstream_read(&ctx->bc, 2)) != CH_UNIT_TERMINATOR) {
if (ch_unit_id == CH_UNIT_EXTENSION) { if (ch_unit_id == CH_UNIT_EXTENSION) {
avpriv_report_missing_feature(avctx, "Channel unit extension"); avpriv_report_missing_feature(avctx, "Channel unit extension");
return AVERROR_PATCHWELCOME; return AVERROR_PATCHWELCOME;
@ -358,7 +359,7 @@ static int atrac3p_decode_frame(AVCodecContext *avctx, void *data,
ctx->ch_units[ch_block].unit_type = ch_unit_id; ctx->ch_units[ch_block].unit_type = ch_unit_id;
channels_to_process = ch_unit_id + 1; channels_to_process = ch_unit_id + 1;
if ((ret = ff_atrac3p_decode_channel_unit(&ctx->gb, if ((ret = ff_atrac3p_decode_channel_unit(&ctx->bc,
&ctx->ch_units[ch_block], &ctx->ch_units[ch_block],
channels_to_process, channels_to_process,
avctx)) < 0) avctx)) < 0)

Loading…
Cancel
Save