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);
68 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);
188 dex = (dql>>7) & 0xf;
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;
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 = c->
se + dq;
212 pk0 = (c->
sez + dq) ?
sgn(c->
sez + dq) : 0;
213 dq0 = dq ?
sgn(dq) : 0;
221 fa1 = av_clip((-c->
a[0]*c->
pk[0]*pk0)>>5, -256, 255);
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];
242 c->
td = c->
a[1] < -11776;
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 << 2, -0xffff, 0xffff);
280 for (i=0; i<2; i++) {
284 for (i=0; i<6; i++) {
295 #if CONFIG_ADPCM_G726_ENCODER
314 "allowed when the compliance level is higher than unofficial. "
315 "Resample or reduce the compliance level.\n");
345 const int16_t *samples = (
const int16_t *)frame->
data[0];
347 int i,
ret, out_size;
359 avpkt->
size = out_size;
364 #define OFFSET(x) offsetof(G726Context, x)
365 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
371 static const AVClass g726_class = {
383 AVCodec ff_adpcm_g726_encoder = {
388 .
init = g726_encode_init,
389 .encode2 = g726_encode_frame,
394 .priv_class = &g726_class,
399 #if CONFIG_ADPCM_G726_DECODER
420 int *got_frame_ptr,
AVPacket *avpkt)
424 int buf_size = avpkt->
size;
428 int out_samples,
ret;
430 out_samples = buf_size * 8 / c->
code_size;
436 samples = (int16_t *)frame->
data[0];
440 while (out_samples--)
457 AVCodec ff_adpcm_g726_decoder = {
462 .
init = g726_decode_init,
463 .
decode = g726_decode_frame,
464 .
flush = g726_decode_flush,