51 f->mant =
i? (i<<6) >>
f->exp : 1<<5;
60 res = (((f1->
mant * f2->
mant) + 0x30) >> 4);
61 res =
exp > 19 ? res << (
exp - 19) : res >> (19 -
exp);
62 return (f1->
sign ^ f2->
sign) ? -res : res;
67 return (
value < 0) ? -1 : 1;
104 { 116, 365, 365, 116 };
106 { -22, 439, 439, -22 };
111 { 7, 217, 330, INT_MAX };
113 { INT16_MIN, 135, 273, 373, 373, 273, 135, INT16_MIN };
115 { -4, 30, 137, 582, 582, 137, 30, -4 };
117 { 0, 1, 2, 7, 7, 2, 1, 0 };
120 { -125, 79, 177, 245, 299, 348, 399, INT_MAX };
122 { INT16_MIN, 4, 135, 213, 273, 323, 373, 425,
123 425, 373, 323, 273, 213, 135, 4, INT16_MIN };
125 { -12, 18, 41, 64, 112, 198, 355, 1122,
126 1122, 355, 198, 112, 64, 41, 18, -12};
128 { 0, 0, 0, 1, 1, 1, 3, 7, 7, 3, 1, 1, 1, 0, 0, 0 };
131 { -122, -16, 67, 138, 197, 249, 297, 338,
132 377, 412, 444, 474, 501, 527, 552, INT_MAX };
134 { INT16_MIN, -66, 28, 104, 169, 224, 274, 318,
135 358, 395, 429, 459, 488, 514, 539, 566,
136 566, 539, 514, 488, 459, 429, 395, 358,
137 318, 274, 224, 169, 104, 28, -66, INT16_MIN };
139 { 14, 14, 24, 39, 40, 41, 58, 100,
140 141, 179, 219, 280, 358, 440, 529, 696,
141 696, 529, 440, 358, 280, 219, 179, 141,
142 100, 58, 41, 40, 39, 24, 14, 14 };
144 { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6,
145 6, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
159 int sign,
exp,
i, dln;
167 dln = ((
exp<<7) + (((d<<7)>>
exp)&0x7f)) - (
c->y>>2);
169 while (
c->tbls.quant[
i] < INT_MAX &&
c->tbls.quant[
i] < dln)
174 if (
c->code_size != 2 &&
i == 0)
187 dql =
c->tbls.iquant[
i] + (
c->y >> 2);
188 dex = (dql>>7) & 0
xf;
189 dqt = (1<<7) + (dql & 0x7f);
190 return (dql < 0) ? 0 : ((dqt<<dex) >> 7);
195 int dq, re_signal, pk0, fa1,
i, tr, ylint, ylfrac, thr2, al, dq0;
197 int I_sig= I >> (
c->code_size - 1);
202 ylint = (
c->yl >> 15);
203 ylfrac = (
c->yl >> 10) & 0x1f;
204 thr2 = (ylint > 9) ? 0x1f << 10 : (0x20 + ylfrac) << ylint;
205 tr= (
c->td == 1 && dq > ((3*thr2)>>2));
209 re_signal = (int16_t)(
c->se + dq);
212 pk0 = (
c->sez + dq) ?
sgn(
c->sez + dq) : 0;
213 dq0 = dq ?
sgn(dq) : 0;
221 fa1 = av_clip_intp2((-
c->a[0]*
c->pk[0]*pk0)>>5, 8);
223 c->a[1] += 128*pk0*
c->pk[1] + fa1 - (
c->a[1]>>7);
224 c->a[1] = av_clip(
c->a[1], -12288, 12288);
225 c->a[0] += 64*3*pk0*
c->pk[0] - (
c->a[0] >> 8);
226 c->a[0] = av_clip(
c->a[0], -(15360 -
c->a[1]), 15360 -
c->a[1]);
229 c->b[
i] += 128*dq0*
sgn(-
c->dq[
i].sign) - (
c->b[
i]>>8);
234 c->pk[0] = pk0 ? pk0 : 1;
236 i2f(re_signal, &
c->sr[0]);
238 c->dq[
i] =
c->dq[
i-1];
240 c->dq[0].sign = I_sig;
242 c->td =
c->a[1] < -11776;
245 c->dms += (
c->tbls.F[I]<<4) + ((-
c->dms) >> 5);
246 c->dml += (
c->tbls.F[I]<<4) + ((-
c->dml) >> 7);
250 c->ap += (-
c->ap) >> 4;
251 if (
c->y <= 1535 ||
c->td ||
abs((
c->dms << 2) -
c->dml) >= (
c->dml >> 3))
256 c->yu = av_clip(
c->y +
c->tbls.W[I] + ((-
c->y)>>5), 544, 5120);
257 c->yl +=
c->yu + ((-
c->yl)>>6);
260 al = (
c->ap >= 256) ? 1<<6 :
c->ap >> 2;
261 c->y = (
c->yl + (
c->yu - (
c->yl>>6))*al) >> 6;
272 return av_clip(re_signal * 4, -0xffff, 0xffff);
280 for (
i=0;
i<2;
i++) {
281 c->sr[
i].mant = 1<<5;
284 for (
i=0;
i<6;
i++) {
285 c->dq[
i].mant = 1<<5;
295 #if CONFIG_ADPCM_G726_ENCODER || CONFIG_ADPCM_G726LE_ENCODER
300 i = av_mod_uintp2(
quant(
c, sig/4 -
c->se),
c->code_size);
311 c->little_endian = !strcmp(avctx->
codec->
name,
"g726le");
316 "allowed when the compliance level is higher than unofficial. "
317 "Resample or reduce the compliance level.\n");
334 c->code_size = av_clip(
c->code_size, 2, 5);
342 avctx->
frame_size = ((
int[]){ 4096, 2736, 2048, 1640 })[
c->code_size - 2];
351 const int16_t *
samples = (
const int16_t *)
frame->data[0];
360 for (
i = 0;
i <
frame->nb_samples;
i++)
361 if (
c->little_endian) {
367 if (
c->little_endian) {
378 #define OFFSET(x) offsetof(G726Context, x)
379 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
391 #if CONFIG_ADPCM_G726_ENCODER
392 static const AVClass g726_class = {
405 .
init = g726_encode_init,
406 .encode2 = g726_encode_frame,
410 .priv_class = &g726_class,
415 #if CONFIG_ADPCM_G726LE_ENCODER
416 static const AVClass g726le_class = {
429 .
init = g726_encode_init,
430 .encode2 = g726_encode_frame,
434 .priv_class = &g726le_class,
439 #if CONFIG_ADPCM_G726_DECODER || CONFIG_ADPCM_G726LE_DECODER
451 c->little_endian = !strcmp(avctx->
codec->
name,
"g726le");
454 if (
c->code_size < 2 ||
c->code_size > 5) {
466 int *got_frame_ptr,
AVPacket *avpkt)
470 int buf_size = avpkt->
size;
474 int out_samples,
ret;
476 out_samples = buf_size * 8 /
c->code_size;
479 frame->nb_samples = out_samples;
486 while (out_samples--)
506 #if CONFIG_ADPCM_G726_DECODER
513 .
init = g726_decode_init,
514 .
decode = g726_decode_frame,
515 .
flush = g726_decode_flush,
520 #if CONFIG_ADPCM_G726LE_DECODER
526 .
init = g726_decode_init,
527 .
decode = g726_decode_frame,
528 .
flush = g726_decode_flush,