先看下面这段小小代码:

#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, 实现了预定目标.

 


本文转载:CSDN博客