DentistryDoctor最后的分押上请教ICDecompress解压成功,但是她的输出BUF确没有数据

huzhangyou 2007-03-27 12:39:32
非常感谢!
我使用ICDecompress调用返回成功

int i_Return ;
pDecBuf = new BYTE[76032];
memset(pDecBuf,0,76032);
if(iter->second->GetKey() != 0){

biEncIn.bmiHeader.biSizeImage = iter->second->Size - 30;
i_Return = ICDecompress(hic,0,&(biEncIn.bmiHeader),iter->second->Data,&(_bmo.bmiHeader),pDecBuf);
}else{
biEncIn.bmiHeader.biSizeImage = iter->second->Size - 30;
i_Return = ICDecompress(hic,ICDECOMPRESS_NOTKEYFRAME,&(biEncIn.bmiHeader),iter->second->Data,&(_bmo.bmiHeader),pDecBuf);
}

if(i_Return == ICERR_OK){
//Success
//UpdatePanel();

HDC hdc;
hdc = GetDC(Panel->Handle);
HANDLE handle = DrawDibOpen();
if(iter->second->GetKey() != 0){
DrawDibDraw(handle,hdc,0,0,_bmo.bmiHeader.biWidth,_bmo.bmiHeader.biHeight,&(_bmo.bmiHeader),pDecBuf,0,0,_bmo.bmiHeader.biWidth,_bmo.bmiHeader.biHeight,0);
}else{
DrawDibDraw(handle,hdc,0,0,_bmo.bmiHeader.biWidth,_bmo.bmiHeader.biHeight,&(_bmo.bmiHeader),pDecBuf,0,0,_bmo.bmiHeader.biWidth,_bmo.bmiHeader.biHeight,DDF_NOTKEYFRAME);
}
DrawDibClose(handle);
ReleaseDC(Panel->Handle, hdc);

我通过Log记录发现调用解压缩肯定是成功了
画图也执行了,但是问题是:
我的DrawDibDraw 画出来的数据是什么也没有,就是一直黑屏幕!

明天就要给客户安装调试了,其他的问题已经解决了,就剩下这最后一个问题
老大们一定要帮小弟一把!
...全文
1442 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huzhangyou 2007-04-01
  • 打赏
  • 举报
回复
无限的感谢 xinquanqiu
知道分队你无所谓
但是算是小弟的感谢之意

目前程序运行良好
xinquanqiu 2007-03-30
  • 打赏
  • 举报
回复
bBitMapInFo 这个是你显示时候的图像格式,是压缩之前的

//取得视频图像格式
procedure TAVCapturer.GetVideoFormat;
var
s,s2:integer;
begin
s:=capGetVideoFormatSize(fhcapWnd);//fhCapWnd: THandle; 视频采集窗口Handle

if assigned(bBitMapInFo) then
FreeMem(bBitMapInFo);

getmem(bBitMapInFo,s);

s2:=capGetVideoFormat(fhcapWnd,bBitMapInFo,s);
if s2 <> s then
begin
FreeMem(bBitMapInFo);
bBitMapInFo:=nil;
end;
end;

FromVdisplayWin.Display(OutBuffer);
//这个显示,显示时候的格式还是上面的bBitMapInFo.
huzhangyou 2007-03-29
  • 打赏
  • 举报
回复
十分感谢、
我已经在别人的工厂了
看到你回的消息 实在很开心

还有一个问题

OutFormatSize := ICDecompressGetFormatSize(CapVar.hic,@bBitMapInFo^.bmiHeader);
GetMem(BmpOutInfo,OutFormatSize);
zeromemory(BmpOutInfo,OutFormatSize);
//我们可以通过初始化时得到的BmpInInfo来获取压缩传出图像头BmpOutInfo

bBitMapInFo这个的定义 我想知道一下您是如何定义的
我肯定我市参数的设置有点问题
很有可能就是这个参数!
十分谢谢了!
还有一个问题就是
FromVdisplayWin.Display(OutBuffer);
这个函数是不是还用到了BmpOutInfo这个参数
向请教如何定义的

xinquanqiu 2007-03-27
  • 打赏
  • 举报
回复
呵呵,没看清楚,我用的是delphi,这样就是用的对了,显示或者解压初始化有没有问题?
huzhangyou 2007-03-27
  • 打赏
  • 举报
回复
to 楼上的:
现在开发已经结束了
只是需要处理好这个问题
所以肯定没有时间了

以后有机会的吧

谢谢了
kimryo 2007-03-27
  • 打赏
  • 举报
回复
以后视频处理也会全部依赖显示卡了~瓦卡卡~!!!
kimryo 2007-03-27
  • 打赏
  • 举报
回复
为什么不用VMR9呢~?还可以用PixelShader,好爽得说~以后肯定是主流啊~
huzhangyou 2007-03-27
  • 打赏
  • 举报
回复
to 楼上的:
if(iter->second->GetKey() != 0){

biEncIn.bmiHeader.biSizeImage = iter->second->Size - 30;
i_Return = ICDecompress(hic,0,&(biEncIn.bmiHeader),iter->second->Data,&(_bmo.bmiHeader),pDecBuf);
}else{
biEncIn.bmiHeader.biSizeImage = iter->second->Size - 30;
i_Return = ICDecompress(hic,ICDECOMPRESS_NOTKEYFRAME,&(biEncIn.bmiHeader),iter->second->Data,&(_bmo.bmiHeader),pDecBuf);
}

我已经判断了啊
不过你好像说反了吧!
xinquanqiu 2007-03-27
  • 打赏
  • 举报
回复
ICDecompress(hic,ICDECOMPRESS_NOTKEYFRAME,&(biEncIn.bmiHeader),iter->second->Data,&(_bmo.bmiHeader),pDecBuf);

ICDECOMPRESS_NOTKEYFRAME参数是在关键帧是用,非关键帧用0.
另外,hic 和两个图像格式要和压缩时对得上

tiger波波 2007-03-27
  • 打赏
  • 举报
回复
好像以前还有相关的贴子,没看到,随便邹两句
你说解压成功,成功后的图片你看了么?是一团漆黑么?不是的话看看你显示的代码
kimryo 2007-03-27
  • 打赏
  • 举报
回复
哈哈
xinquanqiu 2007-03-27
  • 打赏
  • 举报
回复
显示的:

//通知应用过程显示远端图像画面
//VideoBufferRendering;
if MsgData.fKeyFrame=2 then
dDeComPressOut:=ICDecompress(CapVar.hic,0,@bBitMapInFo^.bmiHeader,
FVideoStream.Memory,@BmpOutinfo^.bmiheader,OutBuffer)
else dDeComPressOut:=ICDecompress(CapVar.hic,ICDECOMPRESS_NOTKEYFRAME,@bBitMapInFo^.bmiHeader,
FVideoStream.Memory,@BmpOutinfo^.bmiheader,OutBuffer);
if dDeComPressOut= ICERR_OK then
begin
FromVdisplayWin.Display(OutBuffer);
end;
xinquanqiu 2007-03-27
  • 打赏
  • 举报
回复
前面带"// " 的不用
xinquanqiu 2007-03-27
  • 打赏
  • 举报
回复
//释放解压缩编码器
procedure DeCompressFrameEnd;
//初始化解压缩程序
function DeCompressInitParams:Boolean;

procedure TFormMain.DeCompressFrameEnd;
begin
if CapVar.hic>0 then
begin
ICDecompressEnd(CapVar.hic);
ICClose(CapVar.hic);
end;
end;

function TFormMain.DeCompressInitParams: Boolean;
var
iDeComEnd : DWORD;
begin
Result := False;
//初始化CapVar
ZeroMemory(@CapVar,SizeOf(TCOMPVARS));
CapVar.cbSize := SizeOf(CapVar);

// CapVar.dwFlags := ICDECOMPRESS_NOTKEYFRAME;
CapVar.cbState := 0;
CapVar.fccHandler := mmioFOURCC('M','P','G','4');
CapVar.fccType := ICTYPE_VIDEO;
//正式连接编码器;
CapVar.hic := ICOpen(ICTYPE_VIDEO,CapVar.fccHandler,ICMODE_DECOMPRESS);
if CapVar.hic>0 then
begin
OutFormatSize := ICDecompressGetFormatSize(CapVar.hic,@bBitMapInFo^.bmiHeader);
GetMem(BmpOutInfo,OutFormatSize);
zeromemory(BmpOutInfo,OutFormatSize);
//我们可以通过初始化时得到的BmpInInfo来获取压缩传出图像头BmpOutInfo
ICDecompressGetFormat(CapVar.hic,@bBitMapInFo^.bmiHeader,@BmpOutInfo^.bmiHeader);
OutBufferSize:=BmpOutInfo^.bmiHeader.biSizeImage;
getmem(OutBuffer,OutBufferSize);
zeromemory(OutBuffer,OutBufferSize);
// ICDecompressBegin(CapVar.hic,@BmpInInfo.bmiHeader, @BmpOutInfo^.bmiHeader);

if ICDecompressBegin(CapVar.hic,@bBitMapInFo^.bmiHeader,@BmpOutInfo^.bmiHeader)<> ICERR_OK then
begin
WriteErrorFile(ErrorFile,'未连接','调用编码器初始化错误,未按装视频压缩编码器');
Exit;
end;
Result := True;
end
else
begin
WriteErrorFile(ErrorFile,'未连接','调用编码器初始化错误,未按装视频压缩编码器');
Exit;
end;
end;
huzhangyou 2007-03-27
  • 打赏
  • 举报
回复
to xinquanqiu() :
解压缩初始化应该没有问题
兄弟做过的话
贴一下您的初始化的代码给小弟看一下
如何?

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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