📄 g729a_acelp_ca.c
字号:
for(i0=0; i0<G729A_L_SUBFR; i0+=G729A_STEP)
{
psign = sign_dn;
if (psign[i0] < 0) psign = sign_dn_inv;
for(i1=1; i1<G729A_L_SUBFR; i1+=G729A_STEP)
{
*p0++ = _smpy(*p0, psign[i1])>>16;
*p1++ = _smpy(*p1, psign[i1+1])>>16;
*p2++ = _smpy(*p2, psign[i1+2])>>16;
*p3++ = _smpy(*p3, psign[i1+3])>>16;
}
}
p0 = rri1i2;
p1 = rri1i3;
p2 = rri1i4;
for(i1=1; i1<G729A_L_SUBFR; i1+=G729A_STEP)
{
psign = sign_dn;
if (psign[i1] < 0) psign = sign_dn_inv;
for(i2=2; i2<G729A_L_SUBFR; i2+=G729A_STEP)
{
*p0++ = _smpy(*p0, psign[i2])>>16;
*p1++ = _smpy(*p1, psign[i2+1])>>16;
*p2++ = _smpy(*p2, psign[i2+2])>>16;
}
}
p0 = rri2i3;
p1 = rri2i4;
for(i2=2; i2<G729A_L_SUBFR; i2+=G729A_STEP)
{
psign = sign_dn;
if (psign[i2] < 0) psign = sign_dn_inv;
for(i3=3; i3<G729A_L_SUBFR; i3+=G729A_STEP)
{
*p0++ = _smpy(*p0, psign[i3])>>16;
*p1++ = _smpy(*p1, psign[i3+1])>>16;
}
}
psk = -1;
alpk = 1;
ptr_rri0i3_i4 = rri0i3;
ptr_rri1i3_i4 = rri1i3;
ptr_rri2i3_i4 = rri2i3;
ptr_rri3i3_i4 = rri3i3;
ip0=0; ip1=1; ip2=2; ip3=3; ix=0; iy=0; ps=0;
for (track=3, trk=0; track<5; track++, trk++)
{
sq = -1;
alp = 1;
prev_i0 = -1;
for (i=0; i<2; i++)
{
max = -1;
for (j=2; j<G729A_L_SUBFR; j+=G729A_STEP)
{
if ((G729Asub_s(dn[j], max) > 0) && (G729Asub_s(prev_i0,j) != 0))
{
max = dn[j];
i0 = j;
}
}
prev_i0 = i0;
j = G729Amult(i0, 6554);
p0 = rri2i2 + j;
ps1 = dn[i0];
alp1 = G729AL_mult(*p0, G729A__1_4);
p0 = ptr_rri2i3_i4 + G729Ashl_s(j, 3);
p1 = ptr_rri3i3_i4;
for (i1=track; i1<G729A_L_SUBFR; i1+=G729A_STEP)
{
ps2 = _sadd(ps1, dn[i1]);
alp2 = _sadd(alp1, _smpy(*p0++, G729A__1_2));
alp2 = _sadd(alp2, _smpy(*p1++, G729A__1_4));
sq2 = _smpy(ps2, ps2)>>16;
alp_16 = (Word16)(_sadd(alp2, (Word32)0x00008000L)>>16);
s = _ssub(_smpy(alp,sq2), _smpy(sq,alp_16));
if (s > 0)
{
sq = sq2;
ps = ps2;
alp = alp_16;
ix = i0;
iy = i1;
}
}
}
i0 = ix;
i1 = iy;
i1_offset = G729Ashl_s(G729Amult(i1, 6554), 3);
ps0 = ps;
alp0 = G729AL_mult(alp, G729A__1_4);
sq = -1;
alp = 1;
p0 = rri1i2 + G729Amult(i0, 6554);
p1 = ptr_rri1i3_i4 + G729Amult(i1, 6554);
p2 = rri1i1;
p3 = tmp_vect;
for (i3=1; i3<G729A_L_SUBFR; i3+=G729A_STEP)
{
s = _smpy(*p0, G729A__1_4); p0 += G729A_NB_POS;
s = _sadd(s, _smpy(*p1, G729A__1_4)); p1 += G729A_NB_POS;
s = _sadd(s, _smpy(*p2++, G729A__1_8));
*p3++ = (Word16)(_sadd(s, (Word32)0x00008000L)>>16);
}
p0 = rri0i2 + G729Amult(i0, 6554);
p1 = ptr_rri0i3_i4 + G729Amult(i1, 6554);
p2 = rri0i0;
p3 = rri0i1;
for (i2=0; i2<G729A_L_SUBFR; i2+=G729A_STEP)
{
ps1 = G729Aadd_s(ps0, dn[i2]);
alp1 = G729AL_mac(alp0, *p0, G729A__1_8); p0 += G729A_NB_POS;
alp1 = G729AL_mac(alp1, *p1, G729A__1_8); p1 += G729A_NB_POS;
alp1 = G729AL_mac(alp1, *p2++,G729A__1_16);
p4 = tmp_vect;
for (i3=1; i3<G729A_L_SUBFR; i3+=G729A_STEP)
{
ps2 = G729Aadd_s(ps1, dn[i3]);
alp2 = G729AL_mac(alp1, *p3++, G729A__1_8);
alp2 = G729AL_mac(alp2, *p4++, G729A__1_2);
sq2 = G729Amult(ps2, ps2);
alp_16 = G729Around(alp2);
s = G729AL_msu(G729AL_mult(alp,sq2),sq,alp_16);
if (s > 0)
{
sq = sq2;
alp = alp_16;
ix = i2;
iy = i3;
}
}
}
s = G729AL_msu(G729AL_mult(alpk,sq),psk,alp);
if (s > 0)
{
psk = sq;
alpk = alp;
ip2 = i0;
ip3 = i1;
ip0 = ix;
ip1 = iy;
}
sq = -1;
alp = 1;
prev_i0 = -1;
for (i=0; i<2; i++)
{
max = -1;
for (j=track; j<G729A_L_SUBFR; j+=G729A_STEP)
{
if ((G729Asub_s(dn[j], max) > 0) && (G729Asub_s(prev_i0,j) != 0))
{
max = dn[j];
i0 = j;
}
}
prev_i0 = i0;
j = G729Amult(i0, 6554);
p0 = ptr_rri3i3_i4 + j;
ps1 = dn[i0];
alp1 = G729AL_mult(*p0, G729A__1_4);
p0 = ptr_rri0i3_i4 + j;
p1 = rri0i0;
for (i1=0; i1<G729A_L_SUBFR; i1+=G729A_STEP)
{
ps2 = G729Aadd_s(ps1, dn[i1]);
alp2 = G729AL_mac(alp1, *p0, G729A__1_2); p0 += G729A_NB_POS;
alp2 = G729AL_mac(alp2, *p1++, G729A__1_4);
sq2 = G729Amult(ps2, ps2);
alp_16 = G729Around(alp2);
s = G729AL_msu(G729AL_mult(alp,sq2),sq,alp_16);
if (s > 0)
{
sq = sq2;
ps = ps2;
alp = alp_16;
ix = i0;
iy = i1;
}
}
}
i0 = ix;
i1 = iy;
i1_offset = G729Ashl_s(G729Amult(i1, 6554), 3);
ps0 = ps;
alp0 = G729AL_mult(alp, G729A__1_4);
sq = -1;
alp = 1;
p0 = ptr_rri2i3_i4 + G729Amult(i0, 6554);
p1 = rri0i2 + i1_offset;
p2 = rri2i2;
p3 = tmp_vect;
for (i3=2; i3<G729A_L_SUBFR; i3+=G729A_STEP)
{
s = G729AL_mult(*p0, G729A__1_4); p0 += G729A_NB_POS;
s = G729AL_mac(s, *p1++, G729A__1_4);
s = G729AL_mac(s, *p2++, G729A__1_8);
*p3++ = G729Around(s);
}
p0 = ptr_rri1i3_i4 + G729Amult(i0, 6554);
p1 = rri0i1 + i1_offset;
p2 = rri1i1;
p3 = rri1i2;
for (i2=1; i2<G729A_L_SUBFR; i2+=G729A_STEP)
{
ps1 = G729Aadd_s(ps0, dn[i2]);
alp1 = G729AL_mac(alp0, *p0, G729A__1_8); p0 += G729A_NB_POS;
alp1 = G729AL_mac(alp1, *p1++, G729A__1_8);
alp1 = G729AL_mac(alp1, *p2++, G729A__1_16);
p4 = tmp_vect;
for (i3=2; i3<G729A_L_SUBFR; i3+=G729A_STEP)
{
ps2 = G729Aadd_s(ps1, dn[i3]);
alp2 = G729AL_mac(alp1, *p3++, G729A__1_8);
alp2 = G729AL_mac(alp2, *p4++, G729A__1_2);
sq2 = G729Amult(ps2, ps2);
alp_16 = G729Around(alp2);
s = G729AL_msu(G729AL_mult(alp,sq2),sq,alp_16);
if (s > 0)
{
sq = sq2;
alp = alp_16;
ix = i2;
iy = i3;
}
}
}
s = G729AL_msu(G729AL_mult(alpk,sq),psk,alp);
if (s > 0)
{
psk = sq;
alpk = alp;
ip3 = i0;
ip0 = i1;
ip1 = ix;
ip2 = iy;
}
ptr_rri0i3_i4 = rri0i4;
ptr_rri1i3_i4 = rri1i4;
ptr_rri2i3_i4 = rri2i4;
ptr_rri3i3_i4 = rri4i4;
}
i0 = sign_dn[ip0];
i1 = sign_dn[ip1];
i2 = sign_dn[ip2];
i3 = sign_dn[ip3];
for(i=0; i<G729A_L_SUBFR; i++) {
cod[i] = 0;
}
cod[ip0] = G729Ashr_s(i0, 2);
cod[ip1] = G729Ashr_s(i1, 2);
cod[ip2] = G729Ashr_s(i2, 2);
cod[ip3] = G729Ashr_s(i3, 2);
for (i = 0; i < ip0; i++) y[i] = 0;
if(i0 > 0)
for(i=ip0, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = h[j];
else
for(i=ip0, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Anegate(h[j]);
if(i1 > 0)
for(i=ip1, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Aadd_s(y[i], h[j]);
else
for(i=ip1, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Asub_s(y[i], h[j]);
if(i2 > 0)
for(i=ip2, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Aadd_s(y[i], h[j]);
else
for(i=ip2, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Asub_s(y[i], h[j]);
if(i3 > 0)
for(i=ip3, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Aadd_s(y[i], h[j]);
else
for(i=ip3, j=0; i<G729A_L_SUBFR; i++, j++) y[i] = G729Asub_s(y[i], h[j]);
i = 0;
if(i0 > 0) i = G729Aadd_s(i, 1);
if(i1 > 0) i = G729Aadd_s(i, 2);
if(i2 > 0) i = G729Aadd_s(i, 4);
if(i3 > 0) i = G729Aadd_s(i, 8);
*sign = i;
ip0 = G729Amult(ip0, 6554);
ip1 = G729Amult(ip1, 6554);
ip2 = G729Amult(ip2, 6554);
i = G729Amult(ip3, 6554);
j = G729Aadd_s(i, G729Ashl_s(i, 2));
j = G729Asub_s(ip3, G729Aadd_s(j, 3));
ip3 = G729Aadd_s(G729Ashl_s(i, 1), j);
i = G729Aadd_s(ip0, G729Ashl_s(ip1, 3));
i = G729Aadd_s(i , G729Ashl_s(ip2, 6));
i = G729Aadd_s(i , G729Ashl_s(ip3, 9));
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -