视频压缩的问题(H263压缩的问题)
memset(&m_CV,0,sizeof(COMPVARS));//m_CV是COMPVARS类型的成员变量,压缩参数
m_CV.dwFlags=ICMF_COMPVARS_VALID;
m_CV.cbSize=sizeof(m_CV);
m_CV.cbState=0;
// m_CV.fccHandler=mmioFOURCC('m','p','4','2');
// m_CV.fccHandler=842297453; //MicroSoft MPG4 Codec V2
m_CV.fccHandler=859189837; //H.263 Codec 'm','2','6','3'
// m_CV.fccHandler=859189869; //H.263 Codec 'M','2','6','3'
m_CV.fccType=ICTYPE_VIDEO;
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=5000;
m_CV.hic=ICOpen(ICTYPE_VIDEO,m_CV.fccHandler,ICMODE_COMPRESS);
ICSendMessage(m_CV.hic,0x60c9,0xf7329ace,0xacdeaea2);
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);
ICSeqCompressFrameStart(&m_CV,&m_InInfo);
}
问题是,选用MPG4压缩编码时,上述一切都正常,选用Microsoft H.263,时,ICOpen返回值没问题,到下面ICCompressGetFormatSize竟然得到了4G大的值,后面的m_OutInfo根本没法分配这么多地址,而采用MPG4时正常是40,如果在这里强制赋40给m_OutFormatSize,给m_pOutInfo分配地址后,ICCompressGetFormat操作后m_pOutInfo里的内容都没有初始化,说明没有成功(成功后,应该会根据相应的m_InInfo初始化m_pOutInfo的相应参数的).
这到底是什么问题,是调用H.263的错误吗?