一个视频处理过程buffer数据BYTE

caoatcao 2011-03-07 03:30:38
这是一个视频处理工程,我们的框架已经好了 就是重载这个OnNewFrame,我现在想做一种叫bob的deinterlace的方法,
到 BYTE *pData;
long samplesize;
samplesize=pSample->GetActualDataLength();
pSample->GetPointer(&pData);
void *pdat=(void*)pData;
之后就要对这个pData进行一个操作,就是把单行的数据复制到偶行,然后丢弃偶行数据,这个怎么实现?求指点,多谢了

下面是我一个显示图像的重载OnNewFrame函数。

BOOL CBobDeinterlace::OnNewFrame(IMediaSample* pSample){

CAutoLock lockit(&m_CritSec);

BYTE *pData;
long samplesize;
samplesize=pSample->GetActualDataLength();
pSample->GetPointer(&pData);
void *pdat=(void*)pData;

long nDataSize = 320*240*3;

int iPixel = 32; //RGB24
/*BITMAPFILEHEADER bmfh; //File header
ZeroMemory(&bmfh, sizeof(BITMAPFILEHEADER));
bmfh.bfType = 'MB';
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (320 * 240) * iPixel / */

BITMAPINFOHEADER bmih; //Information header
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = 320; //Image width
bmih.biHeight = 240; //Image height
bmih.biPlanes = 1;
bmih.biBitCount = iPixel; //RGB24
bmih.biCompression = BI_RGB;
bmih.biSizeImage = 0; //Uncompressed RGB bitmaps
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;

BITMAPINFO bmif;
// int iSize = sizeof(BITMAPINFO) + 2 * sizeof(RGBQUAD);
//BITMAPINFO* pBMI = (BITMAPINFO*) malloc(iSize);
// memset(pBMI,0,iSize);
//pBMI->bmiHeader=bmih;


// pBMI->bmiColors[0].rgbBlue=0xff;
// pBMI->bmiColors[1].rgbGreen=0xff;
// pBMI->bmiColors[2].rgbRed=0xff;
// pBMI->bmiColors->rgbReserved=1;





//CBitmap dps;

HBITMAP hdps=CreateDIBitmap(m_pDisplaydc,&bmih,CBM_INIT,pdat,&bmif,DIB_RGB_COLORS);
//dps.Attach(hdps);




HBITMAP hBitmapOld= SelectBitmap(m_pDisplaydc, hdps);

BitBlt(m_pDisplaydc,0,0,320,300,m_image,0,0,SRCCOPY);


//i=0;




return true;
}
...全文
49 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧