一段小小的C++代码(从保存H.264运动矢量过程中想到的)
2012-12-30 19:09
387 查看
先看下面这段小小代码:
结果为:
-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... , 那怎么办呢?想了一段时间,决定用下面的方式来实现:
结果为:
-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, 实现了预定目标.
#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, 实现了预定目标.
相关文章推荐
- TCL解释器与C++代码交互过程?
- 一段关于打开文件保存文件的代码
- 贡献一段学习过程中的爬糗百的代码python
- C++创建线程问题 一段可用代码
- 安装sql server 2017过程中弹出“安装 Microsoft Visual C++ 2015 Redistributable 时出错VS Shell 安装失败,退出代码为 1638”
- oracle存储过程错误跟踪(保存错误行号,错误代码,错误信息)
- 一段代码讲述C++继承、多态、友元、静态变量、重载
- Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示
- 纯C++代码实现将像素矩阵保存为bmp图片
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
- 求一段smartupload上传图片的代码,不需要保存到数据库,但是想在jsp页面选中文件夹图片后,立马可以显示
- Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示
- 一段代码引起的对C++构造函数、析构函数,复制构造函数,运算符重载的深度理解
- 一段有趣的C++代码,五次选择猜出你的生日
- 判断一段代码是由c编译还是c++编译?
- 一段C++练习代码小评(1)
- 由一段游戏层代码想到的
- C++中const与static在面向过程代码中的异同
- android jni开发 把一段java代码转换成c++方式调用
- C++获得一段代码的运行时间