52 f->
mant = i? (i<<6) >> f->
exp : 1<<5;
61 res = (((f1->
mant * f2->
mant) + 0x30) >> 4);
62 res = exp > 19 ? res << (exp - 19) : res >> (19 - exp);
63 return (f1->
sign ^ f2->
sign) ? -res : res;
68 return (value < 0) ? -1 : 1;
105 { 116, 365, 365, 116 };
107 { -22, 439, 439, -22 };
112 { 7, 217, 330, INT_MAX };
114 { INT16_MIN, 135, 273, 373, 373, 273, 135, INT16_MIN };
116 { -4, 30, 137, 582, 582, 137, 30, -4 };
118 { 0, 1, 2, 7, 7, 2, 1, 0 };
121 { -125, 79, 177, 245, 299, 348, 399, INT_MAX };
123 { INT16_MIN, 4, 135, 213, 273, 323, 373, 425,
124 425, 373, 323, 273, 213, 135, 4, INT16_MIN };
126 { -12, 18, 41, 64, 112, 198, 355, 1122,
127 1122, 355, 198, 112, 64, 41, 18, -12};
129 { 0, 0, 0, 1, 1, 1, 3, 7, 7, 3, 1, 1, 1, 0, 0, 0 };
132 { -122, -16, 67, 138, 197, 249, 297, 338,
133 377, 412, 444, 474, 501, 527, 552, INT_MAX };
135 { INT16_MIN, -66, 28, 104, 169, 224, 274, 318,
136 358, 395, 429, 459, 488, 514, 539, 566,
137 566, 539, 514, 488, 459, 429, 395, 358,
138 318, 274, 224, 169, 104, 28, -66, INT16_MIN };
140 { 14, 14, 24, 39, 40, 41, 58, 100,
141 141, 179, 219, 280, 358, 440, 529, 696,
142 696, 529, 440, 358, 280, 219, 179, 141,
143 100, 58, 41, 40, 39, 24, 14, 14 };
145 { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6,
146 6, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
160 int sign, exp, i, dln;
168 dln = ((exp<<7) + (((d<<7)>>exp)&0x7f)) - (c->
y>>2);
189 dex = (dql>>7) & 0xf;
190 dqt = (1<<7) + (dql & 0x7f);
191 return (dql < 0) ? 0 : ((dqt<<dex) >> 7);
196 int dq, re_signal, pk0, fa1, i, tr, ylint, ylfrac, thr2, al, dq0;
203 ylint = (c->
yl >> 15);
204 ylfrac = (c->
yl >> 10) & 0x1f;
205 thr2 = (ylint > 9) ? 0x1f << 10 : (0x20 + ylfrac) << ylint;
206 tr= (c->
td == 1 && dq > ((3*thr2)>>2));
210 re_signal = c->
se + dq;
213 pk0 = (c->
sez + dq) ?
sgn(c->
sez + dq) : 0;
214 dq0 = dq ?
sgn(dq) : 0;
222 fa1 = av_clip((-c->
a[0]*c->
pk[0]*pk0)>>5, -256, 255);
224 c->
a[1] += 128*pk0*c->
pk[1] + fa1 - (c->
a[1]>>7);
225 c->
a[1] = av_clip(c->
a[1], -12288, 12288);
226 c->
a[0] += 64*3*pk0*c->
pk[0] - (c->
a[0] >> 8);
227 c->
a[0] = av_clip(c->
a[0], -(15360 - c->
a[1]), 15360 - c->
a[1]);
230 c->
b[i] += 128*dq0*sgn(-c->
dq[i].
sign) - (c->
b[i]>>8);
235 c->
pk[0] = pk0 ? pk0 : 1;
237 i2f(re_signal, &c->
sr[0]);
239 c->
dq[i] = c->
dq[i-1];
243 c->
td = c->
a[1] < -11776;
251 c->
ap += (-c->
ap) >> 4;
252 if (c->
y <= 1535 || c->
td || abs((c->
dms << 2) - c->
dml) >= (c->
dml >> 3))
257 c->
yu = av_clip(c->
y + c->
tbls.
W[I] + ((-c->
y)>>5), 544, 5120);
258 c->
yl += c->
yu + ((-c->
yl)>>6);
261 al = (c->
ap >= 256) ? 1<<6 : c->
ap >> 2;
262 c->
y = (c->
yl + (c->
yu - (c->
yl>>6))*al) >> 6;
273 return av_clip(re_signal << 2, -0xffff, 0xffff);
281 for (i=0; i<2; i++) {
285 for (i=0; i<6; i++) {
296 #if CONFIG_ADPCM_G726_ENCODER
315 "allowed when the compliance level is higher than unofficial. "
316 "Resample or reduce the compliance level.\n");
346 const int16_t *samples = (
const int16_t *)frame->
data[0];
348 int i,
ret, out_size;
360 avpkt->
size = out_size;
365 #define OFFSET(x) offsetof(G726Context, x)
366 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
372 static const AVClass g726_class = {
384 AVCodec ff_adpcm_g726_encoder = {
390 .
init = g726_encode_init,
391 .encode2 = g726_encode_frame,
395 .priv_class = &g726_class,
400 #if CONFIG_ADPCM_G726_DECODER || CONFIG_ADPCM_G726LE_DECODER
427 int *got_frame_ptr,
AVPacket *avpkt)
431 int buf_size = avpkt->
size;
435 int out_samples,
ret;
437 out_samples = buf_size * 8 / c->
code_size;
443 samples = (int16_t *)frame->
data[0];
447 while (out_samples--)
467 #if CONFIG_ADPCM_G726_DECODER
468 AVCodec ff_adpcm_g726_decoder = {
474 .
init = g726_decode_init,
475 .
decode = g726_decode_frame,
476 .
flush = g726_decode_flush,
481 #if CONFIG_ADPCM_G726LE_DECODER
482 AVCodec ff_adpcm_g726le_decoder = {
487 .
init = g726_decode_init,
488 .
decode = g726_decode_frame,
489 .
flush = g726_decode_flush,