X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnellymoserdec.c;h=8d9af5fff64372a435042510f3d6404a91380c52;hb=dcc39ee10e82833ce24aa57926c00ffeb1948198;hp=08cc4ab15b7444a71343ecfa7101b9b310775175;hpb=e034cc6c60c77dce390b1ac31141b1862bdf8999;p=ffmpeg diff --git a/libavcodec/nellymoserdec.c b/libavcodec/nellymoserdec.c index 08cc4ab15b7..8d9af5fff64 100644 --- a/libavcodec/nellymoserdec.c +++ b/libavcodec/nellymoserdec.c @@ -35,23 +35,20 @@ #include "libavutil/float_dsp.h" #include "libavutil/lfg.h" #include "libavutil/random_seed.h" + +#define BITSTREAM_READER_LE #include "avcodec.h" -#include "dsputil.h" +#include "bitstream.h" #include "fft.h" -#include "fmtconvert.h" #include "internal.h" #include "nellymoser.h" #include "sinewin.h" -#define BITSTREAM_READER_LE -#include "get_bits.h" - typedef struct NellyMoserDecodeContext { AVCodecContext* avctx; - AVFrame frame; AVLFG random_state; - GetBitContext gb; + BitstreamContext bc; float scale_bias; AVFloatDSPContext fdsp; FFTContext imdct_ctx; @@ -70,14 +67,14 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, int bits[NELLY_BUF_LEN]; unsigned char v; - init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8); + bitstream_init8(&s->bc, block, NELLY_BLOCK_LEN); bptr = buf; pptr = pows; - val = ff_nelly_init_table[get_bits(&s->gb, 6)]; + val = ff_nelly_init_table[bitstream_read(&s->bc, 6)]; for (i=0 ; i 0) - val += ff_nelly_delta_table[get_bits(&s->gb, 5)]; + val += ff_nelly_delta_table[bitstream_read(&s->bc, 5)]; pval = -pow(2, val/2048) * s->scale_bias; for (j = 0; j < ff_nelly_band_sizes_table[i]; j++) { *bptr++ = val; @@ -91,8 +88,8 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, for (i = 0; i < 2; i++) { aptr = audio + i * NELLY_BUF_LEN; - init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8); - skip_bits_long(&s->gb, NELLY_HEADER_BITS + i*NELLY_DETAIL_BITS); + bitstream_init8(&s->bc, block, NELLY_BLOCK_LEN); + bitstream_skip(&s->bc, NELLY_HEADER_BITS + i * NELLY_DETAIL_BITS); for (j = 0; j < NELLY_FILL_LEN; j++) { if (bits[j] <= 0) { @@ -100,7 +97,7 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, if (av_lfg_get(&s->random_state) & 1) aptr[j] *= -1.0; } else { - v = get_bits(&s->gb, bits[j]); + v = bitstream_read(&s->bc, bits[j]); aptr[j] = ff_nelly_dequantization_table[(1<random_state, 0); ff_mdct_init(&s->imdct_ctx, 8, 1, 1.0); - avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT); + avpriv_float_dsp_init(&s->fdsp, avctx->flags & AV_CODEC_FLAG_BITEXACT); s->scale_bias = 1.0/(32768*8); avctx->sample_fmt = AV_SAMPLE_FMT_FLT; @@ -136,15 +133,13 @@ static av_cold int decode_init(AVCodecContext * avctx) { avctx->channels = 1; avctx->channel_layout = AV_CH_LAYOUT_MONO; - avcodec_get_frame_defaults(&s->frame); - avctx->coded_frame = &s->frame; - return 0; } static int decode_tag(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) { + AVFrame *frame = data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; NellyMoserDecodeContext *s = avctx->priv_data; @@ -169,12 +164,12 @@ static int decode_tag(AVCodecContext *avctx, void *data, */ /* get output buffer */ - s->frame.nb_samples = NELLY_SAMPLES * blocks; - if ((ret = ff_get_buffer(avctx, &s->frame)) < 0) { + frame->nb_samples = NELLY_SAMPLES * blocks; + if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } - samples_flt = (float *)s->frame.data[0]; + samples_flt = (float *)frame->data[0]; for (i=0 ; iframe; + *got_frame_ptr = 1; return buf_size; } @@ -198,14 +192,14 @@ static av_cold int decode_end(AVCodecContext * avctx) { AVCodec ff_nellymoser_decoder = { .name = "nellymoser", + .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"), .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_NELLYMOSER, .priv_data_size = sizeof(NellyMoserDecodeContext), .init = decode_init, .close = decode_end, .decode = decode_tag, - .capabilities = CODEC_CAP_DR1 | CODEC_CAP_PARAM_CHANGE, - .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"), + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_PARAM_CHANGE, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_NONE }, };