求高人优化代码!copy视频数据相关。解决方法

求高人优化代码!copy视频数据相关。
代码是使用别人写的一个类,大致原理是插入一个Filter在系统中,然后在图像绘制时通知用户程序.

代码如下:

//绘制完图象的时候,收到这个消息,   isRendered为true的时候,表示绘制成功,否则失败
void   CVideoDC::onEndRender(bool   isRendered)  
{
        if(isRendered)
{
unsigned   char*   linePixel   =   m_VideoImage.m_Pixels;
unsigned   char*   pixel   =   linePixel;
union   sPixel_t
{
struct{unsigned   char   r,g,b,a;};
DWORD               color;
};
                                sPixel_t   dcpixel;
for(int   y   =   0   ;   y   <   m_VideoImage.m_Size.m_Height   ;   ++y)
{
for(int   x   =   0   ;   x   <   m_VideoImage.m_Size.m_Width   ;   ++x)
{
dcpixel.a   =   0;
dcpixel.b   =   pixel[0];
dcpixel.g   =   pixel[1];
dcpixel.r   =   pixel[2];

SetPixel(m_hDC,x,   m_VideoImage.m_Size.m_Height   -   y,   dcpixel.color);
pixel   +=   3;
}
linePixel   +=   m_VideoImage.m_Size.m_Pitch;
}
}
}

以上这段代码是把图像绘制到我自己的DC上(是一个内存dc而不是窗体dc,窗体dc更慢),运行时只有10多帧每秒,并且cpu占到了50%(双核的).

把这段代码注释,cpu立刻就降了下来.可见这里的效率有问题.

求高人帮忙优化.


------解决方案--------------------
不能用SetPixel
直接用CreateDIBitmap创建位图,然后BitBlt
------解决方案--------------------
抛砖引玉了,1. 考虑展开循环,2.使用mmx指令优化
------解决方案--------------------
for(int x = 0 ; x < RTRect.mWidth ; ++x)
{
pDstLine[3 * x + 0] = pSrcLine[3 * x + 0];
pDstLine[3 * x + 1] = pSrcLine[3 * x + 1];
pDstLine[3 * x + 2] = pSrcLine[3 * x + 2];
}

=>

memcpy(pDastLine, pSrcLine, RTRect.mWidth * 3);
------解决方案--------------------
使用的filter,可以指定媒体类型为需要的对应RGB或yuv格式,这样避免转换,直接内存中就是bmp等格式,copy出来就可以
------解决方案--------------------
承接性能优化外包