WINCE声音驱动模型概述(1)
2010-04-14 18:49
274 查看
1.1 WINCE的声音模型
标准的WINDOWS CE下的声音处理模型。
1) 声音应用在使用W***E接口函数的时候被COREDLL模块分了类:如果是简单的PCM数据,则直接进入ADM模块,进行SoftWare Mixer或者连Mixer也省了,直接调用Driver放音;如果是压缩模式的数据则进入ACM模块进行解压处理后(比如:GSM/G7XX等等…)再次进入ADM模块。 此外,如果DRIVER支持硬件的Mixer,则应用层直接Bypass掉ACM和ADM,直接进入到驱动进行软件或者硬件进行混音和放音。
2) ACM、Software Mixer都是可选配单元,可以通过注册表或者CE内核配置参数添加或者删除。
1.2 WINCE的声音驱动模型
l 分层模型
这是一个标准的分层 MDD-PDD 流式接口模型。 应用层的W***EAPI都使用WaveAPI Manager(WaveApi.DLL)通过DeviceIOControl映射成为W***_IOControl函数进行处理。
MDD层是微软的标准实现,通过DDSI (device driver service-provider interface )和PDD层实现进行连接。MDD通过消息来通知PDD层(PDD_WaveProc处理)
MDD层接口函数
· W***_Close
· W***_Deinit
· W***_Init
· W***_IOControl
· W***_Open
· W***_PowerDown
· W***_PowerUp
· W***_Read
· W***_Seek
· W***_Write
DDSI接口函数
· PDD_AudioDeinitialize
· PDD_AudioGetInterruptType
· PDD_AudioInitialize
· PDD_AudioMessage
· PDD_AudioPowerHandler
· PDD_WaveProc
但是分层模型也有一定的限制
· 只支持一个设备
· 不支持多个流
· 对循环支持的不好
· 对多个流数据支持的不是很好
l 单片模型
对于单片模型,WINCE是希望过渡到这个方案上的。该模型下,驱动的移植
还是很简单的。同时,该模型也客服了以前只能通过内核的MIXER来支持多个流的局限,在驱动层面即支持输入和输出多个流的混音操作。
l 分层模型的基本运转
分层模型支持同时放音和录音操作。MDD层管理着一个中断处理程序和多个
DMA BUFFERS,一般放音和录音都使用双DMA 缓冲。
比如,放音的时候,应用通过W***EAPI传递过来一些数据,MDD层通过 PDD_WaveProc 函数发送 WPDM_START消息给PDD,PDD层将数据拷贝到DMA缓冲,并启动硬件放音。当DMA完成一个BUFFER的数据传送后,会产生一个硬件中断,PDD层会设定一个 AUDIO_STATE_OUT_PLAYING标志 。如果MDD发现有更多的数据要传送就会通过WPDM_CONTINUE.消息让PDD层继续负责填充DMA缓冲,否则就发送一个WPDM_ENDOFDATA.消息让PDD层停止DMA。
标准的WINDOWS CE下的声音处理模型。
1) 声音应用在使用W***E接口函数的时候被COREDLL模块分了类:如果是简单的PCM数据,则直接进入ADM模块,进行SoftWare Mixer或者连Mixer也省了,直接调用Driver放音;如果是压缩模式的数据则进入ACM模块进行解压处理后(比如:GSM/G7XX等等…)再次进入ADM模块。 此外,如果DRIVER支持硬件的Mixer,则应用层直接Bypass掉ACM和ADM,直接进入到驱动进行软件或者硬件进行混音和放音。
2) ACM、Software Mixer都是可选配单元,可以通过注册表或者CE内核配置参数添加或者删除。
1.2 WINCE的声音驱动模型
l 分层模型
这是一个标准的分层 MDD-PDD 流式接口模型。 应用层的W***EAPI都使用WaveAPI Manager(WaveApi.DLL)通过DeviceIOControl映射成为W***_IOControl函数进行处理。
MDD层是微软的标准实现,通过DDSI (device driver service-provider interface )和PDD层实现进行连接。MDD通过消息来通知PDD层(PDD_WaveProc处理)
MDD层接口函数
· W***_Close
· W***_Deinit
· W***_Init
· W***_IOControl
· W***_Open
· W***_PowerDown
· W***_PowerUp
· W***_Read
· W***_Seek
· W***_Write
DDSI接口函数
· PDD_AudioDeinitialize
· PDD_AudioGetInterruptType
· PDD_AudioInitialize
· PDD_AudioMessage
· PDD_AudioPowerHandler
· PDD_WaveProc
但是分层模型也有一定的限制
· 只支持一个设备
· 不支持多个流
· 对循环支持的不好
· 对多个流数据支持的不是很好
l 单片模型
对于单片模型,WINCE是希望过渡到这个方案上的。该模型下,驱动的移植
还是很简单的。同时,该模型也客服了以前只能通过内核的MIXER来支持多个流的局限,在驱动层面即支持输入和输出多个流的混音操作。
l 分层模型的基本运转
分层模型支持同时放音和录音操作。MDD层管理着一个中断处理程序和多个
DMA BUFFERS,一般放音和录音都使用双DMA 缓冲。
比如,放音的时候,应用通过W***EAPI传递过来一些数据,MDD层通过 PDD_WaveProc 函数发送 WPDM_START消息给PDD,PDD层将数据拷贝到DMA缓冲,并启动硬件放音。当DMA完成一个BUFFER的数据传送后,会产生一个硬件中断,PDD层会设定一个 AUDIO_STATE_OUT_PLAYING标志 。如果MDD发现有更多的数据要传送就会通过WPDM_CONTINUE.消息让PDD层继续负责填充DMA缓冲,否则就发送一个WPDM_ENDOFDATA.消息让PDD层停止DMA。
相关文章推荐
- WINCE声音驱动模型概述
- WINCE声音驱动模型概述
- WINCE声音驱动模型概述(2)--WINCE WAVE接口模型详解
- WINCE声音驱动模型概述(3)--放音的消息解析
- WINCE声音驱动模型概述 - 4
- WINCE声音驱动模型概述(4)
- WINCE声音驱动模型概述 - 3
- WINCE声音驱动模型概述 - 2
- WINCE声音驱动模型概述 - 1
- 领域模型驱动设计(Domain Driven Design)入门概述
- 领域模型驱动设计(Domain Driven Design)入门概述
- WinCE驱动模型
- WINCE 音频驱动之二:驱动模型
- WINCE 音频驱动之二:驱动模型
- 领域模型驱动设计(Domain Driven Design)入门概述 -----DDD 解释
- 领域模型驱动设计(Domain Driven Design)入门概述
- 使用 Rational Software Architect 进行模型驱动和基于模式的开发,第 1 部分: 使用模式的模型驱动开发范例的概述
- Freescale WINCE 6.0休眠唤醒后声音消失,原因居然是驱动线程优先级不够
- ALSA概述--高级linux声音驱动基本介绍和应用
- 领域模型驱动设计(Domain Driven Design)入门概述