读书人

H.263压缩时ICSeqCompressFrame回来空

发布时间: 2012-10-21 09:00:08 作者: rapoo

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

读书人网 >VC/MFC

热点推荐