WINCE声音驱动模型概述(1)

本文详细介绍了Windows CE下的声音处理模型,包括标准的声音应用处理流程、分层模型和单片模型的特点,以及分层模型的具体运行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 WINCE的声音模型

标准的WINDOWS CE下的声音处理模型。

1) 声音应用在使用WAVE接口函数的时候被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 流式接口模型。 应用层的WAVEAPI都使用WaveAPI Manager(WaveApi.DLL)通过DeviceIOControl映射成为WAV_IOControl函数进行处理。

MDD层是微软的标准实现,通过DDSI (device driver service-provider interface )和PDD层实现进行连接。MDD通过消息来通知PDD层(PDD_WaveProc处理)

MDD层接口函数

· WAV_Close

· WAV_Deinit

· WAV_Init

· WAV_IOControl

· WAV_Open

· WAV_PowerDown

· WAV_PowerUp

· WAV_Read

· WAV_Seek

· WAV_Write

DDSI接口函数

· PDD_AudioDeinitialize

· PDD_AudioGetInterruptType

· PDD_AudioInitialize

· PDD_AudioMessage

· PDD_AudioPowerHandler

· PDD_WaveProc

但是分层模型也有一定的限制

· 只支持一个设备

· 不支持多个流

· 对循环支持的不好

· 对多个流数据支持的不是很好

l 单片模型

对于单片模型,WINCE是希望过渡到这个方案上的。该模型下,驱动的移植

还是很简单的。同时,该模型也客服了以前只能通过内核的MIXER来支持多个流的局限,在驱动层面即支持输入和输出多个流的混音操作。

l 分层模型的基本运转

分层模型支持同时放音和录音操作。MDD层管理着一个中断处理程序和多个

DMA BUFFERS,一般放音和录音都使用双DMA 缓冲。

比如,放音的时候,应用通过WAVEAPI传递过来一些数据,MDD层通过 PDD_WaveProc 函数发送 WPDM_START消息给PDD,PDD层将数据拷贝到DMA缓冲,并启动硬件放音。当DMA完成一个BUFFER的数据传送后,会产生一个硬件中断,PDD层会设定一个 AUDIO_STATE_OUT_PLAYING标志 。如果MDD发现有更多的数据要传送就会通过WPDM_CONTINUE.消息让PDD层继续负责填充DMA缓冲,否则就发送一个WPDM_ENDOFDATA.消息让PDD层停止DMA。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值