在T264代码中整数DCT模块使用MMX或者SSE2指令写的,移植到TMS320DM642上面的时候自己改成了效率不高的C语言。
应了毕设的要求,用C6000系列的汇编代码来改写这部分指令。
首先,DCT编码的快速流程主要如下图所示:
优化过程主要是通过dsp的simd(单指令多数据流)的特点,即一个指令能够进行并行的操作。比如内联函数中的_sadd()指令,这个就把两个32位的数据分别按照16的高低位来加减,这样就一下子增大了数据的吞吐量。
其反变化的C语言代码如下所示:
void
idct4x4dc_c(int16_t* data)
{
int32_t i;
int16_t s[4];
for (i = 0; i < 4; i ++)
{
s[0] = data[i * 4 + 0] + data[i * 4 + 2];
s[1] = data[i * 4 + 0] - data[i * 4 + 2];
s[2] = data[i * 4 + 1] - data[i * 4 + 3];
s[3] = data[i * 4 + 1] + data[i * 4 + 3];
data[i * 4 + 0] = s[0] + s[3];
data[i * 4 + 3] = s[0] -