利用VFW实现视频编解码,解码端需要连续ICopen两次,何故?(100相送)

tieniuw 2003-10-20 11:58:54
我利用VC自己编写了一个视频采集压缩网络发送的小程序,碰到一个很奇怪的问题
即在server采集压缩发送没有问题,client端接收也没有问题,但我在client端初
始化解码器的时候发送,利用ICopen()打开解码器,如果只打开一次,解出来的
是花屏效果,而如果连续执行ICopen()两次,这解码成功。
我用的是DIVX编解码器,编码器设置如下:
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=theApp.GetProfileInt("VIDEO","DataRate",128);
m_CV.lFrame=0;
m_CV.lKey=theApp.GetProfileInt("VIDEO","KeyframeRate",10);
m_CV.lKeyCount=0;
m_CV.lpbiIn=NULL;
m_CV.lpBitsOut=NULL;
m_CV.lpBitsPrev=m_CV.lpState=NULL;
// m_CV.lQ=ICQUALITY_DEFAULT;
m_CV.lQ=theApp.GetProfileInt("VIDEO","QualityLevel",ICQUALITY_DEFAULT);
在解码端,利用server端(编码端)发送过来的编码信息m_CV,m_InInfo进行解码器设置。
CVideoClientDlg::InitDecompressor()
{
long m_OutFormatSize;
m_CV.hic=ICOpen(ICTYPE_VIDEO,m_CV.fccHandler,ICMODE_DECOMPRESS);
m_CV.hic=ICOpen(ICTYPE_VIDEO,m_CV.fccHandler,ICMODE_DECOMPRESS);
// 如果只打开一次,则解码是花屏
if (m_CV.hic==NULL)
{
MessageBox("please install the proper decompressor!");
return FALSE;
}
m_OutFormatSize=ICDecompressGetFormatSize(m_CV.hic,&m_InInfo);
m_pOutInfo=(BITMAPINFO*)new BYTE[m_OutFormatSize];
if(ICDecompressGetFormat(m_CV.hic,&m_InInfo,m_pOutInfo)!=ICERR_OK)
return FALSE;
m_OutBufSize=m_pOutInfo->bmiHeader.biSizeImage;
m_pOutBuf=new BYTE[m_OutBufSize];
memset(m_pOutBuf,0,m_OutBufSize);
AddLog("max decompress frame size ",m_OutBufSize);
if( ICDecompressBegin(m_CV.hic,&m_InInfo,m_pOutInfo)!=ICERR_OK)
return FALSE;
return TRUE;
}

我是在局域网内做的实验。这是什么原因?我想应该不是编解码器的问题。
...全文
203 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
windows_editor 2003-10-31
  • 打赏
  • 举报
回复
1 把divx升级到5.0以上版本
2 用ICOpen()打开编解码器前先判断m_CV.hic是否为空 不为空要先ICClose();

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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