|
|
|
@ -44,6 +44,7 @@ |
|
|
|
|
#define RIGHT_SIDE 2 |
|
|
|
|
|
|
|
|
|
typedef struct SonicContext { |
|
|
|
|
AVFrame frame; |
|
|
|
|
int lossless, decorrelation; |
|
|
|
|
|
|
|
|
|
int num_taps, downsampling; |
|
|
|
@ -757,6 +758,9 @@ static av_cold int sonic_decode_init(AVCodecContext *avctx) |
|
|
|
|
s->channels = avctx->channels; |
|
|
|
|
s->samplerate = avctx->sample_rate; |
|
|
|
|
|
|
|
|
|
avcodec_get_frame_defaults(&s->frame); |
|
|
|
|
avctx->coded_frame = &s->frame; |
|
|
|
|
|
|
|
|
|
if (!avctx->extradata) |
|
|
|
|
{ |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "No mandatory headers present\n"); |
|
|
|
@ -848,18 +852,25 @@ static av_cold int sonic_decode_close(AVCodecContext *avctx) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int sonic_decode_frame(AVCodecContext *avctx, |
|
|
|
|
void *data, int *data_size, |
|
|
|
|
void *data, int *got_frame_ptr, |
|
|
|
|
AVPacket *avpkt) |
|
|
|
|
{ |
|
|
|
|
const uint8_t *buf = avpkt->data; |
|
|
|
|
int buf_size = avpkt->size; |
|
|
|
|
SonicContext *s = avctx->priv_data; |
|
|
|
|
GetBitContext gb; |
|
|
|
|
int i, quant, ch, j; |
|
|
|
|
short *samples = data; |
|
|
|
|
int i, quant, ch, j, ret; |
|
|
|
|
short *samples; |
|
|
|
|
|
|
|
|
|
if (buf_size == 0) return 0; |
|
|
|
|
|
|
|
|
|
s->frame.nb_samples = s->frame_size; |
|
|
|
|
if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
samples = s->frame.data[0]; |
|
|
|
|
|
|
|
|
|
// av_log(NULL, AV_LOG_INFO, "buf_size: %d\n", buf_size);
|
|
|
|
|
|
|
|
|
|
init_get_bits(&gb, buf, buf_size*8); |
|
|
|
@ -930,7 +941,8 @@ static int sonic_decode_frame(AVCodecContext *avctx, |
|
|
|
|
|
|
|
|
|
align_get_bits(&gb); |
|
|
|
|
|
|
|
|
|
*data_size = s->frame_size * 2; |
|
|
|
|
*got_frame_ptr = 1; |
|
|
|
|
*(AVFrame*)data = s->frame; |
|
|
|
|
|
|
|
|
|
return (get_bits_count(&gb)+7)/8; |
|
|
|
|
} |
|
|
|
@ -943,6 +955,7 @@ AVCodec ff_sonic_decoder = { |
|
|
|
|
.init = sonic_decode_init, |
|
|
|
|
.close = sonic_decode_close, |
|
|
|
|
.decode = sonic_decode_frame, |
|
|
|
|
.capabilities = CODEC_CAP_DR1, |
|
|
|
|
.long_name = NULL_IF_CONFIG_SMALL("Sonic"), |
|
|
|
|
}; |
|
|
|
|
#endif /* CONFIG_SONIC_DECODER */ |
|
|
|
|