stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:2106回复:11

关于acmStreamOpen的问题?

楼主#
更多 发布于:2002-11-14 18:33
在csdn上问过这个问题,没有人回答;在这里来看一看,希望有人做过这方面的,问题是这样:

我想实现流格式的文件处理,因此,我要用CALLBACK_WINDOW的方式打开它stream,程序代码是这样:

  hr=acmStreamOpen(&acmhs,NULL,&wFormat,&m_Format,NULL,(DWORD)m_bWnd,0,CALLBACK_WINDOW);
 
返回的值是MMSYSERR_INVALPARAM

而这样
hr=acmStreamOpen(&acmhs,NULL,&wFormat,&m_Format,NULL,NULL,0,ACM_STREAMOPENF_NONREALTIME);打开却是正确的,

上面只动了两个参数,我怎么也想不通时参数的错误,
请问为何呢?




minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-15 08:59
没用过这个函数,但看你的代码有点不妥。
第六个参数,用NULL正确,而你用(DWORD)m_hWnd来代替不妥。NULL一般表示一个空指针,也就是应该用相应的指针值来替代。
少了e,就少了全部
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-15 09:21
第六个参数的解释如下:
dwCallback :
Address of a callback function, a handle of a window, or a handle of an event. A callback function will be called only if the conversion stream is opened with the ACM_STREAMOPENF_ASYNC flag. A callback function is notified when the conversion stream is opened or closed and after each buffer is converted. If the conversion stream is opened without the ACM_STREAMOPENF_ASYNC flag, this parameter should be set to zero

好象无错.
生命驱动,活力无限!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-15 09:27
第七个参数:
This parameter is not used with window and event callbacks.
所以应去掉。
生命驱动,活力无限!
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-15 10:58
非常感谢 Mr.ydyuse的回答,还想问一下,如果我想它在每一个缓存的数据处理完成后,能够提示,以进行下一步的操作,怎样才能实现
,还有,帮助文档里面的最后一个参数列出了,callback_window怎样打开才能实现呢?
  对于:
  MMRESULT waveInOpen(
  LPHWAVEIN phwi,            
  UINT uDeviceID,            
  LPWAVEFORMATEX pwfx,      
  DWORD dwCallback,          
  DWORD dwCallbackInstance,  
  DWORD fdwOpen              
);
  打开的方法是一样,如下:

     result=waveInOpen(&m_WaveIn,WAVE_MAPPER,&m_WaveFormat,(DWORD)m_hWnd,0,CALLBACK_WINDOW);
   是成功的,为何对

   MMRESULT acmStreamOpen(
  LPHACMSTREAM phas,    
  HACMDRIVER had,      
  LPWAVEFORMATEX pwfxSrc,  
  LPWAVEFORMATEX pwfxDst,  
  LPWAVEFILTER pwfltr,  
  DWORD dwCallback,    
  DWORD dwInstance,    
  DWORD fdwOpen        
);
不成功,注意第六个参数均是DWORD dwCallback    
 
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-15 11:02
还要感谢minsoft的回答,等一下给分
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-15 16:08
你的第二个问题没太看明白,要不另开一主题解释一下?
生命驱动,活力无限!
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-15 17:18
我的问题是这样,我想处理比较长的音频文件,因此,我要分段处理,我想就是在它处理完后,能够通过某种机制提醒我,好让我继续下一步的处理,这里就是想让它通过windows的消息机制来通知我,所以我用callback_window和传handl of window给它。但不成功?
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-18 10:23
A callback function will be called only if the conversion stream is opened with the ACM_STREAMOPENF_ASYNC flag. !!!A callback function is notified when the conversion stream is opened or closed and after each buffer is converted.

在回调函数里不是可以得到通知吗?在它处理里面设置通知消息是否可行?
生命驱动,活力无限!
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-18 13:12
这样设置:


hr=acmStreamOpen(&acmhs,NULL,&wFormat,&m_Format,NULL,(DWORD)acmStreamConvertCallback,0,ACM_STREAMOPENF_ASYNC );
返回值是
ACMERR_NOTPOSSIBLE
 acmStreamConvertCallback为回调函数,如果在这样设置:

hr=acmStreamOpen(&acmhs,NULL,&wFormat,&m_Format,NULL,(DWORD)acmStreamConvertCallback,0,ACM_STREAMOPENF_ASYNC|CALLBACK_FUNCTION );
返回值是:
MMSYSERR_INVALPARAM

怪了??



[编辑 -  11/18/02 by  stower]
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-18 13:48
,(DWORD)acmStreamConvertCallback
这儿应传给一个函数的地址。好象不用(DWORD)

其实MSDN中有一个CODEC的例子,去看一下。

给分吧!!
生命驱动,活力无限!
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-18 15:34
感谢ydyuse的回答
游客

返回顶部