H.263压缩时ICSeqCompressFrame返回空
如题。
前面的ICOpen,ICSeqCompressFrameStart,ICDecompressBegin等步骤都正常未出错,但在调用到ICSeqCompressFrame时返回空。代码大致如下:
m_cv.cbSize = sizeof(m_cv);
m_cv.dwFlags = ICMF_COMPVARS_VALID;
m_cv.HICF_ACCELERATOR = m_hIC;
m_cv.fccType = ICTYPE_VIDEO;
m_cv.fccHandler = 859189837;
m_cv.lpbiOut = 0;
m_cv.lKey = 10;
m_cv.lDataRate = 6;
m_cv.lQ = 10000;
m_BmpU.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_BmpU.bmiHeader.biWidth = 176;
m_BmpU.bmiHeader.biHeight = 144;
m_BmpU.bmiHeader.biPlanes = 1;
m_BmpU.bmiHeader.biBitCount = 24;
m_BmpU.bmiHeader.biSizeImage = 76032;
m_BmpU.bmiHeader.biCompression = BI_RGB;
BOOL CCodecMgr::InitCodecV()
{
DestroyCodecV();
BOOL bRet = FALSE;
m_hIC = ICOpen(ICTYPE_VIDEO, 859189837, ICMODE_COMPRESS|ICMODE_DECOMPRESS);
if(!m_hIC)
goto RET;
ICCompressGetFormat(m_hIC, &m_BmpU, &m_BmpC);
ICSendMessage(m_hIC, 0x60c9, 0xf7329ace, 0xacdeaea2);
m_cv.hic = m_hIC;
m_cv.dwFlags = ICMF_COMPVARS_VALID;
bRet = ICSeqCompressFrameStart(&m_cv, &m_BmpU);
if(!bRet)
goto RET;
if(ICDecompressBegin(m_hIC, &m_BmpC, &m_BmpU)!=ICERR_OK)
goto RET;
bRet = TRUE;
RET:
if(!bRet)
DestroyCodecV();
return bRet;
}
BOOL CCodecMgr::EncodeVideoData(char*pin, int len, char*pout, int* lenr, BOOL* pKey)
{
BOOL bRet = FALSE;
char*p;
long s = 2000;
BOOL k;
if(!pin || !pout || len !=(int)m_BmpU.BITMAPINFOHEADER.biSizeImage || !m_hIC)
goto RET;
p = (char*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s); //--此处返回空--//
if(!p)
goto RET;
if(lenr)
*lenr = s;
if(pKey)
*pKey = k;
RET:
return bRet;
}
关键就是运行到p = (char*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s); 时,总返回空。
求达人帮忙看下。
[解决办法]
up