您的位置:首页 > 编程语言 > C语言/C++

一段小小的C++代码(从保存H.264运动矢量过程中想到的)

2012-12-30 19:09 387 查看
        先看下面这段小小代码:

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: