阅读:2106回复:11
关于acmStreamOpen的问题?
在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);打开却是正确的, 上面只动了两个参数,我怎么也想不通时参数的错误, 请问为何呢? |
|
沙发#
发布于:2002-11-15 08:59
没用过这个函数,但看你的代码有点不妥。
第六个参数,用NULL正确,而你用(DWORD)m_hWnd来代替不妥。NULL一般表示一个空指针,也就是应该用相应的指针值来替代。 |
|
|
板凳#
发布于: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 好象无错. |
|
|
地板#
发布于:2002-11-15 09:27
第七个参数:
This parameter is not used with window and event callbacks. 所以应去掉。 |
|
|
地下室#
发布于: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 |
|
5楼#
发布于:2002-11-15 11:02
还要感谢minsoft的回答,等一下给分
|
|
6楼#
发布于:2002-11-15 16:08
你的第二个问题没太看明白,要不另开一主题解释一下?
|
|
|
7楼#
发布于:2002-11-15 17:18
我的问题是这样,我想处理比较长的音频文件,因此,我要分段处理,我想就是在它处理完后,能够通过某种机制提醒我,好让我继续下一步的处理,这里就是想让它通过windows的消息机制来通知我,所以我用callback_window和传handl of window给它。但不成功?
|
|
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.
在回调函数里不是可以得到通知吗?在它处理里面设置通知消息是否可行? |
|
|
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] |
|
10楼#
发布于:2002-11-18 13:48
,(DWORD)acmStreamConvertCallback
这儿应传给一个函数的地址。好象不用(DWORD) 其实MSDN中有一个CODEC的例子,去看一下。 给分吧!! |
|
|
11楼#
发布于:2002-11-18 15:34
感谢ydyuse的回答
|
|