我知道将yuy2转换为rgb的公式,如下所述: Convert yuy2 to bitmap
我的问题是我不知道如何在directshow过滤器中应用它:
在directshow中我有一个缓冲区和标题但是如何将它们转换为rgb? 公式是:
int C = luma - 16;
int D = cr - 128;
int E = cb - 128;
r = (298*C+409*E+128)/256;
g = (298*C-100*D-208*E+128)/256;
b = (298*C+516*D+128)/256;
如何获取这些值以及如何将它们写入输出缓冲区?
这就是我现在复制缓冲区的方式:
long lSizeSample = sample->GetSize();
long lSizeOutSample = outsample->GetSize();
outsample->GetPointer(&newBuffer);
sample->GetPointer(&sampleBuffer);
memcpy((void *)newBuffer, (void *)sampleBuffer, lSizeSample);
所以我只是复制缓冲区。但我该如何修改呢?
答案 0 :(得分:0)
考虑步幅,平面/打包格式等,而不是memcpy
,您需要逐像素地进行转换。在大多数情况下,需要对其进行优化,例如使用SIMD,以获得不错的性能。< / p>
当然,您可以自己做数学运算,但如果Vista +适合您,您也可以通过Color Converter DSP为您完成转换。
DSP可以作为DMO使用,或者您可以使用DMO Wrapper Filter并将其用作随时可用的DirectShow过滤器。