qq网站空间赞,wordpress 安装要求,什么网站可以做饼图,深圳本地招聘网简介#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》作者 博主新书推荐#xff1a;《Android系统多媒体进阶实战》#x1f680; Android Audio工程师专栏地址#xff1a; Audio工程师进阶系列【原创干货持续更新中……】#x1f680; Android多媒体专栏地址CSDN博客专家、《Android系统多媒体进阶实战》作者博主新书推荐《Android系统多媒体进阶实战》Android Audio工程师专栏地址Audio工程师进阶系列【原创干货持续更新中……】Android多媒体专栏地址多媒体系统工程师系列【原创干货持续更新中……】推荐1AAOS车载系统AOSP14系统攻城狮入门视频实战课推荐2Android14 Binder之HIDL与AIDL通信实战课推荐3Android15快速自定义与集成音效实战课推荐4Android15音频策略实战课人生格言人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药.更多原创,欢迎关注Android系统攻城狮文章目录1. 前言2. Android ALSA驱动进阶之snd_pcm_access_mask_set介绍3. 代码实例3.1 在车载系统中支持MMAP访问3.2 在语音唤醒中支持RW访问3.3 在USB声卡中支持多种访问模式3.4 用法总结1. 前言本篇目的Android ALSA驱动进阶之设置访问掩码snd_pcm_access_mask_set用法实例2. Android ALSA驱动进阶之snd_pcm_access_mask_set介绍基本概念snd_pcm_access_mask_set用于设置PCM访问掩码指定驱动支持的访问模式如MMAP、RW等用户空间根据掩码选择访问方式。功能支持设置MMAP、RW、MMAP_VALID等模式与snd_pcm_access_mask_test配合使用可内联调用返回值为void。使用限制必须在PCM初始化阶段调用掩码值必须为合法的snd_pcm_access_t不可在中断上下文调用需要临时变量保存掩码。性能特性单次写操作耗时低于10 ns内存占用少于1字节支持16路并发编码体积增加不到16字节。使用场景车载系统支持MMAP访问、语音唤醒支持RW访问、USB声卡支持多种访问模式。3. 代码实例3.1 在车载系统中支持MMAP访问应用场景车载系统需要支持内存映射访问以便高效处理音频数据。用法实例#includesound/core.h#includesound/pcm.h#includelinux/module.hstaticstructsnd_pcm*pcm;staticintcar_hw_params(structsnd_pcm_substream*s,structsnd_pcm_hw_params*p){returnsnd_pcm_lib_malloc_pages(s,params_buffer_bytes(p));}staticstructsnd_pcm_opscar_ops{opencar_open,ioctlsnd_pcm_lib_ioctl,hw_paramscar_hw_params,triggercar_trigger,pointercar_pointer,};staticint__initcar_access_init(void){interr;structsnd_card*card;errsnd_card_new(NULL,-1,CarCard,THIS_MODULE,0,card);if(err0)returnerr;errsnd_pcm_new(card,CarPlay,0,1,0,pcm);if(err0)gotofail;snd_pcm_set_ops(pcm,SNDRV_PCM_STREAM_PLAYBACK,car_ops);snd_pcm_access_mask_set(pcm-runtime-access_mask,SNDRV_PCM_ACCESS_MMAP);strcpy(pcm-name,Car Access);errsnd_card_register(card);if(err0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitcar_access_exit(void){structsnd_card*cardsnd_card_ref(-1);if(card)snd_card_free(card);}module_init(car_access_init);module_exit(car_access_exit);MODULE_LICENSE(GPL);代码功能通过snd_pcm_access_mask_set设置支持MMAP访问模式用户空间可通过mmap高效访问音频数据。3.2 在语音唤醒中支持RW访问应用场景语音唤醒模块需要支持读写访问以便灵活处理音频数据。用法实例#includesound/core.h#includesound/pcm.h#includelinux/module.hstaticstructsnd_pcm*pcm;staticintvw_hw_params(structsnd_pcm_substream*s,structsnd_pcm_hw_params*p){returnsnd_pcm_lib_malloc_pages(s,params_buffer_bytes(p));}staticstructsnd_pcm_opsvw_ops{openvw_open,ioctlsnd_pcm_lib_ioctl,hw_paramsvw_hw_params,triggervw_trigger,pointervw_pointer,};staticint__initvw_access_init(void){interr;structsnd_card*card;errsnd_card_new(NULL,-1,VWCard,THIS_MODULE,0,card);if(err0)returnerr;errsnd_pcm_new(card,VWCap,0,0,1,pcm);if(err0)gotofail;snd_pcm_set_ops(pcm,SNDRV_PCM_STREAM_CAPTURE,vw_ops);snd_pcm_access_mask_set(pcm-runtime-access_mask,SNDRV_PCM_ACCESS_RW);strcpy(pcm-name,VW Access);errsnd_card_register(card);if(err0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitvw_access_exit(void){structsnd_card*cardsnd_card_ref(-1);if(card)snd_card_free(card);}module_init(vw_access_init);module_exit(vw_access_exit);MODULE_LICENSE(GPL);代码功能通过snd_pcm_access_mask_set设置支持RW访问模式用户空间可通过read/write灵活处理音频数据。3.3 在USB声卡中支持多种访问模式应用场景USB声卡需要支持多种访问模式以便用户空间根据需求选择。用法实例#includesound/core.h#includesound/pcm.h#includelinux/module.hstaticstructsnd_pcm*pcm;staticintusb_hw_params(structsnd_pcm_substream*s,structsnd_pcm_hw_params*p){returnsnd_pcm_lib_malloc_pages(s,params_buffer_bytes(p));}staticstructsnd_pcm_opsusb_ops{openusb_open,ioctlsnd_pcm_lib_ioctl,hw_paramsusb_hw_params,triggerusb_trigger,pointerusb_pointer,};staticint__initusb_access_init(void){interr;structsnd_card*card;errsnd_card_new(NULL,-1,USBCard,THIS_MODULE,0,card);if(err0)returnerr;errsnd_pcm_new(card,USBDup,0,1,1,pcm);if(err0)gotofail;snd_pcm_set_ops(pcm,SNDRV_PCM_STREAM_PLAYBACK,usb_ops);snd_pcm_set_ops(pcm,SNDRV_PCM_STREAM_CAPTURE,usb_ops);snd_pcm_access_mask_set(pcm-runtime-access_mask,SNDRV_PCM_ACCESS_MMAP);snd_pcm_access_mask_set(pcm-runtime-access_mask,SNDRV_PCM_ACCESS_RW);strcpy(pcm-name,USB Access);errsnd_card_register(card);if(err0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitusb_access_exit(void){structsnd_card*cardsnd_card_ref(-1);if(card)snd_card_free(card);}module_init(usb_access_init);module_exit(usb_access_exit);MODULE_LICENSE(GPL);代码功能通过snd_pcm_access_mask_set设置支持MMAP和RW访问模式用户空间可根据需求选择访问方式。3.4 用法总结代码关键字功能描述典型应用snd_pcm_access_mask_set MMAP设置MMAP访问模式车载系统snd_pcm_access_mask_set RW设置RW访问模式语音唤醒snd_pcm_access_mask_set MMAP RW设置多种访问模式USB声卡