本文由锈水管原创。
网上有很多YUV到RGB的转化程序,不过他们基本上都是基于CPU进行计算,基于CPU计算大体上有一下的一些方法,最原始的肯定是根据转换公式直接进行浮点运算,要想提高速度,可以用左移和右移操作,将浮点运算变成整数运算,这样转化的速度会成倍的提高。另外还可以用查表法,因为YUV都是在0~255之间,他们总是有范围的,先生成一个很大的查找表,直接对每一个YUV分量查找出RGB值,当然这个查找表会很大,可以用部分查找的方法来缩小查找表的容量。
用CPU计算比较好的方法就是利用CPU的SSE指令,有一个专门的名词是来形容SSE的,那就是“单指令流多数据流”,意思就是他可以一次对多个数据进行计算,当然速度是非常快的。
在这里,我主要写一下我用shader做转化的方法,首先,当然是介绍一下YUV:
Windows下YUV格式的介绍在MSDN上介绍的非常全面。YUV的格式有很多种,有444,422,420之分,并且每一种具体的格式也有许多不同的标准。具体在MSDN的以下地址上有详细的介绍:
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/VideoRende8BitY