半肾
精华
|
战斗力 鹅
|
回帖 0
注册时间 2010-9-21
|
引用第32楼Castiel于2011-01-12 00:28发表的 :
现阶段基于dct的图像压缩, 都是以方块来处理的, 但是要达到合适的质量, 这个方块大小应该是根据图片来的, 然后分成64x64, 32x32, 16x16, 8x8丢给处理线程.
所谓预处理就是来算最合适的分块.
对于CPU来说不同大小分块影响不大, 线程数不多也可以一个个来.
对于cuda来说如果大分块多, 剩下的所有处理单元就要等大分块完成才能进行下一帧, 由于所谓GPGPU单线程性能非常悲剧, 那么并行化得到的性能提升说不定是负的.
如果cuda直接把所有图像都8x8了, 那么的确无比快, 但是损失质量或者码率. 个人觉得anand的测试结果反映的就是这个问题, 和计算精度没啥关系.
....... 
现在的问题就是h264标准里面DCT的部分从一开始就是给硬件而非软件设计的,精度不够,扔进帧内/帧间预测负反馈循环里。只要碰上预测这件事并行很难处理的好,大概是因为Synchronize的原因,纵使百千sp,快的总是在等慢的处理完才能进行下一步
不管是4*4和8*8的DCT正交阵都想用尽量少的位运算而不是位长较短的浮点运算来完成,软硬件实现是方便了,CUDA就吃瘪,除非他能定义出自定义位长的RGB值和中间计算值(比如10bit 12bit)之类的去做DCT和预测,DCT精度提高,预测步骤也会极大的节省。
鸡蛋灌饼你h264的pdf看完了么 顺便提一句,h264算法具体操作的时候,可以直接高频分量置0,尤其对待警车那种图,简单粗暴有效。一般残差数据只有整数,又比较接近对数正态分布,0附近的高频分量真是早死早超生就可以了 |
|