32
34
* TrueSpeech decoder context
36
int16_t vector[8]; //< input vector: 5/5/4/4/4/3/3/3
37
int offset1[2]; //< 8-bit value, used in one copying offset
38
int offset2[4]; //< 7-bit value, encodes offsets for copying and for two-point filter
39
int pulseoff[4]; //< 4-bit offset of pulse values block
40
int pulsepos[4]; //< 27-bit variable, encodes 7 pulse positions
41
int pulseval[4]; //< 7x2-bit pulse values
42
int flag; //< 1-bit flag, shows how to choose filters
41
int16_t vector[8]; ///< input vector: 5/5/4/4/4/3/3/3
42
int offset1[2]; ///< 8-bit value, used in one copying offset
43
int offset2[4]; ///< 7-bit value, encodes offsets for copying and for two-point filter
44
int pulseoff[4]; ///< 4-bit offset of pulse values block
45
int pulsepos[4]; ///< 27-bit variable, encodes 7 pulse positions
46
int pulseval[4]; ///< 7x2-bit pulse values
47
int flag; ///< 1-bit flag, shows how to choose filters
43
48
/* temporary data */
44
49
int filtbuf[146]; // some big vector used for storing filters
45
50
int prevfilt[8]; // filter from previous frame
55
60
static av_cold int truespeech_decode_init(AVCodecContext * avctx)
57
// TSContext *c = avctx->priv_data;
62
TSContext *c = avctx->priv_data;
64
if (avctx->channels != 1) {
65
av_log_ask_for_sample(avctx, "Unsupported channel count: %d\n", avctx->channels);
66
return AVERROR(EINVAL);
59
69
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
71
dsputil_init(&c->dsp, avctx);
73
avcodec_get_frame_defaults(&c->frame);
74
avctx->coded_frame = &c->frame;
63
79
static void truespeech_read_frame(TSContext *dec, const uint8_t *input)
73
dec->vector[0] = ts_codebook[0][(t >> 1) & 0x1F];
74
dec->vector[1] = ts_codebook[1][(t >> 6) & 0x1F];
75
dec->vector[2] = ts_codebook[2][(t >> 11) & 0xF];
76
dec->vector[3] = ts_codebook[3][(t >> 15) & 0xF];
77
dec->vector[4] = ts_codebook[4][(t >> 19) & 0xF];
78
dec->vector[5] = ts_codebook[5][(t >> 23) & 0x7];
79
dec->vector[6] = ts_codebook[6][(t >> 26) & 0x7];
80
dec->vector[7] = ts_codebook[7][(t >> 29) & 0x7];
86
dec->offset2[0] = (t >> 0) & 0x7F;
87
dec->offset2[1] = (t >> 7) & 0x7F;
88
dec->offset2[2] = (t >> 14) & 0x7F;
89
dec->offset2[3] = (t >> 21) & 0x7F;
91
dec->offset1[0] = ((t >> 28) & 0xF) << 4;
97
dec->pulseval[0] = (t >> 0) & 0x3FFF;
98
dec->pulseval[1] = (t >> 14) & 0x3FFF;
100
dec->offset1[1] = (t >> 28) & 0x0F;
106
dec->pulseval[2] = (t >> 0) & 0x3FFF;
107
dec->pulseval[3] = (t >> 14) & 0x3FFF;
109
dec->offset1[1] |= ((t >> 28) & 0x0F) << 4;
115
dec->pulsepos[0] = (t >> 4) & 0x7FFFFFF;
117
dec->pulseoff[0] = (t >> 0) & 0xF;
119
dec->offset1[0] |= (t >> 31) & 1;
125
dec->pulsepos[1] = (t >> 4) & 0x7FFFFFF;
127
dec->pulseoff[1] = (t >> 0) & 0xF;
129
dec->offset1[0] |= ((t >> 31) & 1) << 1;
135
dec->pulsepos[2] = (t >> 4) & 0x7FFFFFF;
137
dec->pulseoff[2] = (t >> 0) & 0xF;
139
dec->offset1[0] |= ((t >> 31) & 1) << 2;
145
dec->pulsepos[3] = (t >> 4) & 0x7FFFFFF;
147
dec->pulseoff[3] = (t >> 0) & 0xF;
149
dec->offset1[0] |= ((t >> 31) & 1) << 3;
83
dec->dsp.bswap_buf((uint32_t *)dec->buffer, (const uint32_t *)input, 8);
84
init_get_bits(&gb, dec->buffer, 32 * 8);
86
dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
87
dec->vector[6] = ts_codebook[6][get_bits(&gb, 3)];
88
dec->vector[5] = ts_codebook[5][get_bits(&gb, 3)];
89
dec->vector[4] = ts_codebook[4][get_bits(&gb, 4)];
90
dec->vector[3] = ts_codebook[3][get_bits(&gb, 4)];
91
dec->vector[2] = ts_codebook[2][get_bits(&gb, 4)];
92
dec->vector[1] = ts_codebook[1][get_bits(&gb, 5)];
93
dec->vector[0] = ts_codebook[0][get_bits(&gb, 5)];
94
dec->flag = get_bits1(&gb);
96
dec->offset1[0] = get_bits(&gb, 4) << 4;
97
dec->offset2[3] = get_bits(&gb, 7);
98
dec->offset2[2] = get_bits(&gb, 7);
99
dec->offset2[1] = get_bits(&gb, 7);
100
dec->offset2[0] = get_bits(&gb, 7);
102
dec->offset1[1] = get_bits(&gb, 4);
103
dec->pulseval[1] = get_bits(&gb, 14);
104
dec->pulseval[0] = get_bits(&gb, 14);
106
dec->offset1[1] |= get_bits(&gb, 4) << 4;
107
dec->pulseval[3] = get_bits(&gb, 14);
108
dec->pulseval[2] = get_bits(&gb, 14);
110
dec->offset1[0] |= get_bits1(&gb);
111
dec->pulsepos[0] = get_bits_long(&gb, 27);
112
dec->pulseoff[0] = get_bits(&gb, 4);
114
dec->offset1[0] |= get_bits1(&gb) << 1;
115
dec->pulsepos[1] = get_bits_long(&gb, 27);
116
dec->pulseoff[1] = get_bits(&gb, 4);
118
dec->offset1[0] |= get_bits1(&gb) << 2;
119
dec->pulsepos[2] = get_bits_long(&gb, 27);
120
dec->pulseoff[2] = get_bits(&gb, 4);
122
dec->offset1[0] |= get_bits1(&gb) << 3;
123
dec->pulsepos[3] = get_bits_long(&gb, 27);
124
dec->pulseoff[3] = get_bits(&gb, 4);
153
127
static void truespeech_correlate_filter(TSContext *dec)
330
304
c->prevfilt[i] = c->cvector[i];
333
static int truespeech_decode_frame(AVCodecContext *avctx,
334
void *data, int *data_size,
307
static int truespeech_decode_frame(AVCodecContext *avctx, void *data,
308
int *got_frame_ptr, AVPacket *avpkt)
337
310
const uint8_t *buf = avpkt->data;
338
311
int buf_size = avpkt->size;
339
312
TSContext *c = avctx->priv_data;
342
short *samples = data;
344
int16_t out_buf[240];
318
iterations = buf_size / 32;
351
321
av_log(avctx, AV_LOG_ERROR,
352
322
"Too small input buffer (%d bytes), need at least 32 bytes\n", buf_size);
355
iterations = FFMIN(buf_size / 32, *data_size / 480);
326
/* get output buffer */
327
c->frame.nb_samples = iterations * 240;
328
if ((ret = avctx->get_buffer(avctx, &c->frame)) < 0) {
329
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
332
samples = (int16_t *)c->frame.data[0];
334
memset(samples, 0, iterations * 240 * sizeof(*samples));
356
336
for(j = 0; j < iterations; j++) {
357
truespeech_read_frame(c, buf + consumed);
337
truespeech_read_frame(c, buf);
360
340
truespeech_correlate_filter(c);
361
341
truespeech_filters_merge(c);
363
memset(out_buf, 0, 240 * 2);
364
343
for(i = 0; i < 4; i++) {
365
344
truespeech_apply_twopoint_filter(c, i);
366
truespeech_place_pulses(c, out_buf + i * 60, i);
367
truespeech_update_filters(c, out_buf + i * 60, i);
368
truespeech_synth(c, out_buf + i * 60, i);
345
truespeech_place_pulses (c, samples, i);
346
truespeech_update_filters(c, samples, i);
347
truespeech_synth (c, samples, i);
371
351
truespeech_save_prevvec(c);
373
/* finally output decoded frame */
374
for(i = 0; i < 240; i++)
375
*samples++ = out_buf[i];
379
*data_size = consumed * 15;
355
*(AVFrame *)data = c->frame;
384
360
AVCodec ff_truespeech_decoder = {
389
truespeech_decode_init,
392
truespeech_decode_frame,
361
.name = "truespeech",
362
.type = AVMEDIA_TYPE_AUDIO,
363
.id = CODEC_ID_TRUESPEECH,
364
.priv_data_size = sizeof(TSContext),
365
.init = truespeech_decode_init,
366
.decode = truespeech_decode_frame,
367
.capabilities = CODEC_CAP_DR1,
393
368
.long_name = NULL_IF_CONFIG_SMALL("DSP Group TrueSpeech"),