先看下面这段小小代码:
- #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, 实现了预定目标.