先看下面这段小小代码:
#include <iostream>
using namespace std;
int main()
{
int mv, i;
for(mv = -10; mv < 0; mv++)
{
for(i = 0; i < 16; i++)
{
cout << mv << " ";
}
cout << endl;
}
return 0;
}
结果为:
-10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10
-9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9
-8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8
-7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7
-6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6
-5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5
-4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
-3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
-2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
假设有5个P-skip宏块(16 * 16),运动矢量分别为(-10, -9)(-8, -7)(-6, -5)(-4, -3)(-12, -1). 在JM8.6解码器中,对于每个P-skip宏块,都会认为每个4 * 4块有一个运动矢量,这样(-10, -9)就会分给16个4 * 4块,现在要把这16个运动矢量保存起来,显然,上面的程序不能实现,因为正确的形式应该是-10, -9,-10, -9... , 那怎么办呢?想了一段时间,决定用下面的方式来实现:
#include <iostream>
using namespace std;
int main()
{
int buffer[2];
int mv, i, flag = 0;
for(mv = -10; mv < 0; mv++)
{
if(flag < 2)
buffer[flag++] = mv;
if(2 == flag)
{
for(i = 0; i < 16; i++)
{
cout << buffer[0] << " "
<< buffer[1] << " ";
}
flag = 0;
cout << endl;
}
}
return 0;
}
结果为:
-10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10 -9 -10
-9 -10 -9 -10 -9 -10 -9 -10 -9
-8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8 -7 -8
-7 -8 -7 -8 -7
-6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6 -5 -6
-5 -6 -5 -6 -5
-4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4 -3 -4
-3 -4 -3 -4 -3
-2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2
-1 -2 -1 -2 -1
OK, 实现了预定目标.