news 2026/7/14 8:37:22

Android ALSA驱动进阶之设置访问掩码snd_pcm_access_mask_set:用法实例(九十九)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android ALSA驱动进阶之设置访问掩码snd_pcm_access_mask_set:用法实例(九十九)

简介:CSDN博客专家、《Android系统多媒体进阶实战》作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏地址:Audio工程师进阶系列原创干货持续更新中……】🚀
Android多媒体专栏地址:多媒体系统工程师系列原创干货持续更新中……】🚀
推荐1:AAOS车载系统+AOSP14系统攻城狮入门视频实战课🚀
推荐2:Android14 Binder之HIDL与AIDL通信实战课🚀
推荐3:Android15快速自定义与集成音效实战课🚀
推荐4:Android15音频策略实战课🚀

人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注: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介绍

  1. 基本概念
    snd_pcm_access_mask_set用于设置PCM访问掩码,指定驱动支持的访问模式,如MMAP、RW等,用户空间根据掩码选择访问方式。

  2. 功能
    支持设置MMAP、RW、MMAP_VALID等模式;与snd_pcm_access_mask_test配合使用;可内联调用;返回值为void。

  3. 使用限制
    必须在PCM初始化阶段调用;掩码值必须为合法的snd_pcm_access_t;不可在中断上下文调用;需要临时变量保存掩码。

  4. 性能特性
    单次写操作;耗时低于10 ns;内存占用少于1字节;支持16路并发;编码体积增加不到16字节。

  5. 使用场景
    车载系统支持MMAP访问、语音唤醒支持RW访问、USB声卡支持多种访问模式。

🌻3. 代码实例

🌻3.1 在车载系统中支持MMAP访问
  1. 应用场景
    车载系统需要支持内存映射访问,以便高效处理音频数据。

  2. 用法实例

#include<sound/core.h>#include<sound/pcm.h>#include<linux/module.h>staticstructsnd_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={open=car_open,ioctl=snd_pcm_lib_ioctl,hw_params=car_hw_params,trigger=car_trigger,pointer=car_pointer,};staticint__initcar_access_init(void){interr;structsnd_card*card;err=snd_card_new(NULL,-1,"CarCard",THIS_MODULE,0,&card);if(err<0)returnerr;err=snd_pcm_new(card,"CarPlay",0,1,0,&pcm);if(err<0)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");err=snd_card_register(card);if(err<0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitcar_access_exit(void){structsnd_card*card=snd_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访问
  1. 应用场景
    语音唤醒模块需要支持读写访问,以便灵活处理音频数据。

  2. 用法实例

#include<sound/core.h>#include<sound/pcm.h>#include<linux/module.h>staticstructsnd_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={open=vw_open,ioctl=snd_pcm_lib_ioctl,hw_params=vw_hw_params,trigger=vw_trigger,pointer=vw_pointer,};staticint__initvw_access_init(void){interr;structsnd_card*card;err=snd_card_new(NULL,-1,"VWCard",THIS_MODULE,0,&card);if(err<0)returnerr;err=snd_pcm_new(card,"VWCap",0,0,1,&pcm);if(err<0)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");err=snd_card_register(card);if(err<0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitvw_access_exit(void){structsnd_card*card=snd_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声卡中支持多种访问模式
  1. 应用场景
    USB声卡需要支持多种访问模式,以便用户空间根据需求选择。

  2. 用法实例

#include<sound/core.h>#include<sound/pcm.h>#include<linux/module.h>staticstructsnd_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={open=usb_open,ioctl=snd_pcm_lib_ioctl,hw_params=usb_hw_params,trigger=usb_trigger,pointer=usb_pointer,};staticint__initusb_access_init(void){interr;structsnd_card*card;err=snd_card_new(NULL,-1,"USBCard",THIS_MODULE,0,&card);if(err<0)returnerr;err=snd_pcm_new(card,"USBDup",0,1,1,&pcm);if(err<0)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");err=snd_card_register(card);if(err<0)gotofail;return0;fail:snd_card_free(card);returnerr;}staticvoid__exitusb_access_exit(void){structsnd_card*card=snd_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声卡
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 22:39:23

【AI本地化新突破】:Open-AutoGLM在Windows 11的3种部署方式大公开

第一章&#xff1a;Open-AutoGLM本地部署概述Open-AutoGLM 是一款基于开源大语言模型的自动化代码生成工具&#xff0c;支持自然语言到代码的智能转换。通过本地化部署&#xff0c;用户可在内网环境中安全地使用其功能&#xff0c;避免敏感数据外泄&#xff0c;同时提升响应效率…

作者头像 李华
网站建设 2026/7/14 6:35:07

UI-TARS坐标定位精度优化:从像素偏差到亚像素精度的技术演进

UI-TARS坐标定位精度优化&#xff1a;从像素偏差到亚像素精度的技术演进 【免费下载链接】UI-TARS 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS 在UI-TARS项目的实际部署中&#xff0c;坐标定位精度问题往往成为影响用户体验的关键瓶颈。从点击位置偏移…

作者头像 李华
网站建设 2026/7/14 5:14:50

Alpine Node.js Docker镜像终极指南:构建轻量级应用容器

Alpine Node.js Docker镜像终极指南&#xff1a;构建轻量级应用容器 【免费下载链接】alpine-node Minimal Node.js Docker Images built on Alpine Linux 项目地址: https://gitcode.com/gh_mirrors/al/alpine-node 你是否曾经为Docker镜像体积过大而烦恼&#xff1f;是…

作者头像 李华
网站建设 2026/7/10 1:58:40

LabelImg标注质量实战:从IOU计算到一致性检查的避坑指南

LabelImg标注质量实战&#xff1a;从IOU计算到一致性检查的避坑指南 【免费下载链接】labelImg 项目地址: https://gitcode.com/gh_mirrors/labe/labelImg 在计算机视觉项目实践中&#xff0c;我们发现标注质量直接影响模型性能。通过分析多个项目的标注数据&#xff0…

作者头像 李华
网站建设 2026/7/12 9:48:52

FaceFusion在智能门禁系统中的活体检测扩展应用

FaceFusion在智能门禁系统中的活体检测扩展应用技术背景与问题驱动 在智慧楼宇、社区安防和企业办公日益依赖“无感通行”的今天&#xff0c;人脸识别门禁系统的普及速度远超预期。然而&#xff0c;随之而来的安全挑战也愈发严峻&#xff1a;一张打印照片、一段手机回放视频&am…

作者头像 李华