|
|
@ -34,7 +34,6 @@ |
|
|
|
|
|
|
|
|
|
|
|
/** decoder context */ |
|
|
|
/** decoder context */ |
|
|
|
typedef struct EightSvxContext { |
|
|
|
typedef struct EightSvxContext { |
|
|
|
AVFrame frame; |
|
|
|
|
|
|
|
uint8_t fib_acc[2]; |
|
|
|
uint8_t fib_acc[2]; |
|
|
|
const int8_t *table; |
|
|
|
const int8_t *table; |
|
|
|
|
|
|
|
|
|
|
@ -85,6 +84,7 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
int *got_frame_ptr, AVPacket *avpkt) |
|
|
|
int *got_frame_ptr, AVPacket *avpkt) |
|
|
|
{ |
|
|
|
{ |
|
|
|
EightSvxContext *esc = avctx->priv_data; |
|
|
|
EightSvxContext *esc = avctx->priv_data; |
|
|
|
|
|
|
|
AVFrame *frame = data; |
|
|
|
int buf_size; |
|
|
|
int buf_size; |
|
|
|
int ch, ret; |
|
|
|
int ch, ret; |
|
|
|
int is_compr = (avctx->codec_id != AV_CODEC_ID_PCM_S8_PLANAR); |
|
|
|
int is_compr = (avctx->codec_id != AV_CODEC_ID_PCM_S8_PLANAR); |
|
|
@ -136,26 +136,25 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* get output buffer */ |
|
|
|
/* get output buffer */ |
|
|
|
esc->frame.nb_samples = buf_size * (is_compr + 1); |
|
|
|
frame->nb_samples = buf_size * (is_compr + 1); |
|
|
|
if ((ret = ff_get_buffer(avctx, &esc->frame)) < 0) { |
|
|
|
if ((ret = ff_get_buffer(avctx, frame)) < 0) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (ch = 0; ch < avctx->channels; ch++) { |
|
|
|
for (ch = 0; ch < avctx->channels; ch++) { |
|
|
|
if (is_compr) { |
|
|
|
if (is_compr) { |
|
|
|
delta_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx], |
|
|
|
delta_decode(frame->data[ch], &esc->data[ch][esc->data_idx], |
|
|
|
buf_size, &esc->fib_acc[ch], esc->table); |
|
|
|
buf_size, &esc->fib_acc[ch], esc->table); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
raw_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx], |
|
|
|
raw_decode(frame->data[ch], &esc->data[ch][esc->data_idx], |
|
|
|
buf_size); |
|
|
|
buf_size); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
esc->data_idx += buf_size; |
|
|
|
esc->data_idx += buf_size; |
|
|
|
|
|
|
|
|
|
|
|
*got_frame_ptr = 1; |
|
|
|
*got_frame_ptr = 1; |
|
|
|
*(AVFrame *)data = esc->frame; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return avpkt->size; |
|
|
|
return avpkt->size; |
|
|
|
} |
|
|
|
} |
|
|
@ -184,9 +183,6 @@ static av_cold int eightsvx_decode_init(AVCodecContext *avctx) |
|
|
|
} |
|
|
|
} |
|
|
|
avctx->sample_fmt = AV_SAMPLE_FMT_U8P; |
|
|
|
avctx->sample_fmt = AV_SAMPLE_FMT_U8P; |
|
|
|
|
|
|
|
|
|
|
|
avcodec_get_frame_defaults(&esc->frame); |
|
|
|
|
|
|
|
avctx->coded_frame = &esc->frame; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|