有关vfw编程中遇到的vcm视频压缩的问题,请大家帮忙!

zhangkai0619 2005-04-13 04:42:52
小弟在编写一个类似网络视频聊天的程序,在作视频压缩vcm是遇到一个问题,就是无法得到压缩后的buffer。程序部分代码如下:
1、视频压缩的初始化:
void CplaycapDlg::InitCompressor(void)
{
memset(&m_CV,0,sizeof(COMPVARS));
m_CV.dwFlags=ICMF_COMPVARS_VALID;
m_CV.cbSize=sizeof(m_CV);
m_CV.cbState=0;
m_CV.fccHandler=mmioFOURCC('d','i','v','x');
m_CV.fccType=ICTYPE_VIDEO;
m_CV.hic=ICOpen(ICTYPE_VIDEO,mmioFOURCC('d','i','v','x'),ICMODE_COMPRESS);
m_CV.lDataRate=780;
m_CV.lFrame=0;
m_CV.lKey=15;
m_CV.lKeyCount=0;
m_CV.lpbiIn=NULL;
m_CV.lpBitsOut=NULL;
m_CV.lpBitsPrev=m_CV.lpState=NULL;
m_CV.lQ=ICQUALITY_DEFAULT;
if (m_CV.hic!=NULL)
{
m_OutFormatSize=ICCompressGetFormatSize(m_CV.hic,&m_InInfo);
m_pOutInfo=(BITMAPINFO *)new BYTE[m_OutFormatSize];
ICCompressGetFormat(m_CV.hic,&m_InInfo,m_pOutInfo);
m_OutBufferSize=ICCompressGetSize(m_CV.hic,&m_InInfo,m_pOutInfo);
if (ICSeqCompressFrameStart(&m_CV,&m_InInfo))
AfxMessageBox("压缩初始化成功");
else
AfxMessageBox("压缩初始化失败");
if(ICDecompressBegin(m_CV.hic,m_pOutInfo,&m_InInfo)!=ICERR_OK)
AfxMessageBox("解压初始化失败!");
else
AfxMessageBox("解压初始化成功!");
}
}
2、视频回调(我用的是摄相头):
LRESULT CALLBACK CplaycapDlg::FrameCallBack(HWND hWnd,LPVIDEOHDR lpVHdr)
{
CplaycapDlg* pDlg=(CplaycapDlg*)::AfxGetMainWnd();
pDlg->CompressFrame(lpVHdr);
return TRUE;
}
3、视频压缩并解压
void CplaycapDlg::CompressFrame(LPVIDEOHDR lpVHdr)
{


BOOL bKeyFrame;
m_OutActSize=this->m_InInfo.bmiHeader.biSizeImage;
BYTE* Buf=(BYTE*)ICSeqCompressFrame(&m_CV,0,
lpVHdr->lpData,&bKeyFrame,(long*)&m_OutActSize);//问题出在这里

if(Buf!=NULL)
{
DWORD Result;
Result=ICDecompressm_CV.hic,ICDECOMPRESS_HURRYUP,&m_InInfo.bmiHeader,Buf,&m_pOutInfo->bmiHeader,buff);
//if(Result==ICERR_OK)
AfxMessageBox("解压成功!");
//else
//AfxMessageBox("解压失败!");
CDC *pdc=GetDC();
HDC hdc=pdc->GetSafeHdc();
StretchDIBits(hdc,0,0,176,144,0,0,176,144,buff,&m_InInfo),DIB_RGB_COLORS,SRCCOPY);
}
}

...............


虽然Buf被赋予一个地址(msdn中说被赋予一个就表示压缩成功了)。但该地址所指向的内存单元的值为空。不知道错误出在哪里,请各位大虾帮帮忙,小弟我感激不尽。

以前有人问过,最后他搞定了,但没给出答案,所以只好再问下,请各位帮忙
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangkai0619 2005-04-14
  • 打赏
  • 举报
回复
继续UP
zhangkai0619 2005-04-14
  • 打赏
  • 举报
回复
UP 一下
dfkill 2005-04-13
  • 打赏
  • 举报
回复
COPY一段别的大虾的代码给你参数,我也是刚开始学的,
QQ:10114040

BYTE tmp[200*1024] = "";

memcpy(tmp,lpVHdr->lpData,lpVHdr->dwBytesUsed);
char* Buf=(char *)ICSeqCompressFrame(&m_CV,0,tmp,&bKeyFrame,(long*)&m_OutActSize);
afxDump<<m_OutActSize<<"\n";

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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