*/
/**
- * @file shorten.c
+ * @file libavcodec/shorten.c
* 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 lpcqoffset;
} ShortenContext;
-static int shorten_decode_init(AVCodecContext * avctx)
+static av_cold int shorten_decode_init(AVCodecContext * avctx)
{
ShortenContext *s = avctx->priv_data;
s->avctx = avctx;
+ avctx->sample_fmt = SAMPLE_FMT_S16;
return 0;
}
s->offset[chan][i] = mean;
}
-static int inline get_le32(GetBitContext *gb)
+static inline int get_le32(GetBitContext *gb)
{
return bswap_32(get_bits_long(gb, 32));
}
-static short inline get_le16(GetBitContext *gb)
+static inline short get_le16(GetBitContext *gb)
{
return bswap_16(get_bits_long(gb, 16));
}
avctx->sample_rate = get_le32(&hb);
avctx->bit_rate = get_le32(&hb) * 8;
avctx->block_align = get_le16(&hb);
- avctx->bits_per_sample = get_le16(&hb);
+ avctx->bits_per_coded_sample = get_le16(&hb);
- if (avctx->bits_per_sample != 16) {
+ if (avctx->bits_per_coded_sample != 16) {
av_log(avctx, AV_LOG_ERROR, "unsupported number of bits per sample\n");
return -1;
}
static int shorten_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
- uint8_t *buf, int buf_size)
+ AVPacket *avpkt)
{
+ const uint8_t *buf = avpkt->data;
+ int buf_size = avpkt->size;
ShortenContext *s = avctx->priv_data;
int i, input_buf_size = 0;
int16_t *samples = data;
s->bitstream_size= buf_size;
if(buf_size < s->max_framesize){
- //dprintf("wanna more data ... %d\n", buf_size);
+ //dprintf(avctx, "wanna more data ... %d\n", buf_size);
+ *data_size = 0;
return input_buf_size;
}
}
init_get_bits(&s->gb, buf, buf_size*8);
- get_bits(&s->gb, s->bitindex);
+ skip_bits(&s->gb, s->bitindex);
if (!s->blocksize)
{
int maxnlpc = 0;
/* shorten signature */
- if (get_bits_long(&s->gb, 32) != bswap_32(ff_get_fourcc("ajkg"))) {
+ if (get_bits_long(&s->gb, 32) != AV_RB32("ajkg")) {
av_log(s->avctx, AV_LOG_ERROR, "missing shorten magic 'ajkg'\n");
return -1;
}
s->lpcqoffset = V2LPCQOFFSET;
if (get_ur_golomb_shorten(&s->gb, FNSIZE) != FN_VERBATIM) {
- av_log(s->avctx, AV_LOG_ERROR, "missing verbatim section at begining of stream\n");
+ av_log(s->avctx, AV_LOG_ERROR, "missing verbatim section at beginning of stream\n");
return -1;
}
s->blocksize = get_uint(s, av_log2(s->blocksize));
break;
case FN_QUIT:
+ *data_size = 0;
return buf_size;
break;
default:
return i;
}
-static int shorten_decode_close(AVCodecContext *avctx)
+static av_cold int shorten_decode_close(AVCodecContext *avctx)
{
ShortenContext *s = avctx->priv_data;
int i;
shorten_decode_close,
shorten_decode_frame,
.flush= shorten_flush,
+ .long_name= NULL_IF_CONFIG_SMALL("Shorten"),
};