h.263视频编码标准学习笔记(一)
来源:互联网 发布:道路景观效果图 知乎 编辑:程序博客网 时间:2024/05/17 08:36
很高兴,终于可以抽出时间来具体剖析263和264的源码了。这件事情一直想做,却一方面由于事情缠身,另一方面也犹豫自己偶尔的踌躇不定,拖到了今天。
前几天花时间好好剖析了2维DCT算法,最快的Leoffler算法,只需XX次乘法,XX次加法。然后分别找到了3个版本的2维图像DCT源码,编程比较各自的时间消耗。最终发现,导师给的DEMO效率是最高的,这在一定程度上摧毁了我的一些信心,因为这样我在这个项目上能上升的空间就更小了。自己必须破釜沉舟,积极寻找新思路,开疆辟土。
一 学习DCT:
二 学习263源码:
263源码帧内编码框图如下图所示:
本项目暂时只做I帧编码,即只涉及帧内编码。(帧间编码框图在相应论文里面也可以找到。)
今天主要进行了几个方向的改进,可以从软件更新版本上来分析:
test263_Oct12_10_35 最初的版本 PC平台上编码50帧QCIF,平均每帧耗时0.0128s
test263_Oct12_10_36 去除编码端重建帧模块 PC平台上编码50帧QCIF,平均每帧耗时0.00812s 相比最初版本速度提高1.57倍
test263_Oct12_10_42 在DCT中,DCT系数采用整型,计算采用移位策略。 PC平台上编码50帧QCIF,平均每帧耗时0.00688s 相比最初版本速度提高1.86倍
test263_Oct12_21_34 增加解码端写YUV模块,以便进行解码后的主观评测。
今天遇到的主要问题有:
1.263编码后所写的编码文件,每帧的“分界线”是字符串“000080”,由于每帧图片压缩率不一样,所以每个“分界线”之间的字符的多少是不定的(但是我发现它们都比第一帧的压缩数据大小略大一些,这个问题不知道为什么,明天向导师求疑)。于是,在解码端需要搜索这样一个字符串。所以自己编写了一段代码,来“分割”这些待解码的“帧”。
这部分代码如下:
size_t frames=50;
unsigned char *p=data+3;
for(i=0;i<frames;i++)
{
printf("/ndecompressing frame...%d",i);
// int ret=DecompressFrame(data+i*size,size,rgbdata,80000);
int ret;
{
int psize=0;
for(;;)
{
if(*p==0x00 && *(p+1)==0x00 && *(p+2)==0x80)
{
if(i==0)
psize+=3;
else
psize+=1;
//printf("psize=%d/n",psize);
break;
}
else
{
++p;
++psize;
}
}
ret=DecompressFrame(p,psize,rgbdata,80000);
++p;
}
if(ret)
printf("/n success");
else
{
printf("/n failure");
continue;
}
}
最后,结果成功。缺憾就是:偶尔有几帧图片解码有极小部分的乱码。明天还要好好分析一下。
by jack_incredible
- h.263视频编码标准学习笔记(一)
- 纵览视频编码标准H.264/AVC
- 纵览视频编码标准H.264/AVC
- 视频编码标准H.264/AVC
- 视频编码标准H.264/AVC
- 限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
- 视频编码标准从H.261到H.264(转)
- 视频编码标准从H.261到H.264
- H.264-AVC视频编码原理及实现(一)
- H.264-AVC视频编码原理及实现(一)
- H.264-AVC视频编码原理及实现(一)
- 高效视频编码(HEVC)标准概述(一)
- 高效视频编码(HEVC)标准概述(一)
- 视频编码学习笔记
- H.264视频编码技术学习资源(不断收集)
- Hi3515视频编码(H.264)笔记
- 嵌入式 Hi3515视频编码(H.264)笔记
- 嵌入式 Hi3515视频编码(H.264)笔记
- Spring的工作原理
- FreeEIM 企业即时通讯软件源代码2010年8月份最新版
- 修改const常量的方法
- VC产生(生成)GUID
- 穿透写、返回写
- h.263视频编码标准学习笔记(一)
- 读《探索式软件测试》
- 链接器都干了些什么?
- 算法设计大师——图灵奖得主John Hopcroft
- 算法导论第八章:线性时间排序
- Chapter 11: Using Menu-Based Controls Defining menu structure and data
- .NET GDI 模拟小球弹性碰撞(质点,动能守恒)
- Eclipse反编译工具JAD.exe使用
- Hibernate 配置属性