* Shorten decoder
* Copyright (c) 2005 Jeff Muizelaar
*
- * This file is part of FFmpeg.
+ * This file is part of Libav.
*
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
- * @file libavcodec/shorten.c
+ * @file
* Shorten decoder
* @author Jeff Muizelaar
*
#define DEBUG
#include <limits.h>
#include "avcodec.h"
-#include "bitstream.h"
+#include "get_bits.h"
#include "golomb.h"
#define MAX_CHANNELS 8
int32_t *decoded[MAX_CHANNELS];
int32_t *offset[MAX_CHANNELS];
+ int *coeffs;
uint8_t *bitstream;
int bitstream_size;
int bitstream_index;
{
ShortenContext *s = avctx->priv_data;
s->avctx = avctx;
- avctx->sample_fmt = SAMPLE_FMT_S16;
+ avctx->sample_fmt = AV_SAMPLE_FMT_S16;
return 0;
}
static int allocate_buffers(ShortenContext *s)
{
int i, chan;
+ int *coeffs;
+
for (chan=0; chan<s->channels; chan++) {
if(FFMAX(1, s->nmean) >= UINT_MAX/sizeof(int32_t)){
av_log(s->avctx, AV_LOG_ERROR, "nmean too large\n");
s->decoded[chan][i] = 0;
s->decoded[chan] += s->nwrap;
}
+
+ coeffs = av_realloc(s->coeffs, s->nwrap * sizeof(*s->coeffs));
+ if (!coeffs)
+ return AVERROR(ENOMEM);
+ s->coeffs = coeffs;
+
return 0;
}
static inline int get_le32(GetBitContext *gb)
{
- return bswap_32(get_bits_long(gb, 32));
+ return av_bswap32(get_bits_long(gb, 32));
}
static inline short get_le16(GetBitContext *gb)
{
- return bswap_16(get_bits_long(gb, 16));
+ return av_bswap16(get_bits_long(gb, 16));
}
static int decode_wave_header(AVCodecContext *avctx, uint8_t *header, int header_size)
static void decode_subframe_lpc(ShortenContext *s, int channel, int residual_size, int pred_order)
{
int sum, i, j;
- int coeffs[pred_order];
+ int *coeffs = s->coeffs;
for (i=0; i<pred_order; i++)
coeffs[i] = get_sr_golomb_shorten(&s->gb, LPCQUANT);
s->bitstream_size= buf_size;
if(buf_size < s->max_framesize){
- //dprintf(avctx, "wanna more data ... %d\n", buf_size);
+ //av_dlog(avctx, "wanna more data ... %d\n", buf_size);
*data_size = 0;
return input_buf_size;
}
case FN_QLPC:
{
int pred_order = get_ur_golomb_shorten(&s->gb, LPCQSIZE);
+ if (pred_order > s->nwrap) {
+ av_log(avctx, AV_LOG_ERROR,
+ "invalid pred_order %d\n",
+ pred_order);
+ return -1;
+ }
for (i=0; i<pred_order; i++)
s->decoded[channel][i - pred_order] -= coffset;
decode_subframe_lpc(s, channel, residual_size, pred_order);
av_freep(&s->offset[i]);
}
av_freep(&s->bitstream);
+ av_freep(&s->coeffs);
return 0;
}
s->bitstream_index= 0;
}
-AVCodec shorten_decoder = {
+AVCodec ff_shorten_decoder = {
"shorten",
- CODEC_TYPE_AUDIO,
+ AVMEDIA_TYPE_AUDIO,
CODEC_ID_SHORTEN,
sizeof(ShortenContext),
shorten_decode_init,