如何将yuy2视频样本转换为rgb样本?

时间:2014-04-08 12:32:51

标签: c++ directshow

我知道将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);

所以我只是复制缓冲区。但我该如何修改呢?

1 个答案:

答案 0 :(得分:0)

考虑步幅,平面/打包格式等,而不是memcpy,您需要逐像素地进行转换。在大多数情况下,需要对其进行优化,例如使用SIMD,以获得不错的性能。< / p>

当然,您可以自己做数学运算,但如果Vista +适合您,您也可以通过Color Converter DSP为您完成转换。

DSP可以作为DMO使用,或者您可以使用DMO Wrapper Filter并将其用作随时可用的DirectShow过滤器。