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

简介: 1.1 WINCE的声音模型      标准的WINDOWS CE下的声音处理模型。 1)  声音应用在使用WAVE接口函数的时候被COREDLL模块分了类:如果是简单的PCM数据,则直接进入ADM模块,进行SoftWare Mixer或者连Mixer也省了,直接调用Driver放音;如果是压缩模式的数据则进入ACM模块进行解压处理后(比如:GSM/G7XX等等…)再次进入ADM模块。

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。

目录
相关文章
|
4月前
|
Linux 程序员 编译器
将驱动程序移植到新的驱动模型 【ChatGPT】
将驱动程序移植到新的驱动模型 【ChatGPT】
|
4月前
|
Linux API 芯片
平台设备和驱动程序 【ChatGPT】
平台设备和驱动程序 【ChatGPT】
|
4月前
|
存储 安全 IDE
设备电源管理基础 【ChatGPT】
设备电源管理基础 【ChatGPT】
|
缓存 编解码 数据格式
USB摄像头驱动思路
USB摄像头驱动思路
|
机器学习/深度学习 人工智能 算法
嵌入式端音频开发(Unisound篇)之 7.1 蜂鸟M离线语音芯片简介
嵌入式端音频开发(Unisound篇)之 7.1 蜂鸟M离线语音芯片简介
635 0
嵌入式端音频开发(Unisound篇)之 7.1 蜂鸟M离线语音芯片简介
|
Ubuntu Linux Windows
Linux驱动开发: 编写USB接口光谱仪驱动
Linux驱动开发: 编写USB接口光谱仪驱动
206 0
|
编解码 UED
UWP开发入门(六)——对多设备不同分辨率显示效果的讨论
原文:UWP开发入门(六)——对多设备不同分辨率显示效果的讨论   本篇不涉及具体代码,而是把实际开发UWP APP的过程中,遇到的不同设备,不同分辨率显示效果差异的问题进行讨论。希望能够抛砖引玉,和各位擦出一些火花。
1274 0
|
传感器 安全 语音技术
《Kinect应用开发实战:用最自然的方式与机器对话》一2.2 Kinect传感器的硬件组成
本节书摘来自华章出版社《Kinect应用开发实战:用最自然的方式与机器对话》一书中的第2章,第2.2节,作者 余涛,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3285 0