Android2.2、Android2.3 、Android4.0 audio hardware模块分析

简介:  Android2.2、Android2.3 、Android4.0 audio hardware模块分析         从事Linux开发的工程技术人员都知道,ALSA是Advanced Linux Sound Architecture的简写,它现在很流行,起初使用在台式电脑上,随着嵌入式的发展,它有把触角伸入了新的园地,并且在这个新舞台上越来越受欢迎。

 Android2.2、Android2.3 、Android4.0 audio hardware模块分析

 

      从事Linux开发的工程技术人员都知道,ALSA是Advanced Linux Sound Architecture的简写,它现在很流行,起初使用在台式电脑上,随着嵌入式的发展,它有把触角伸入了新的园地,并且在这个新舞台上越来越受欢迎。ALSA很强大,功能很丰富,当然本身就比较庞大了一些。事情都是这样的,使用起来简单,就必然有个环节要付出艰辛, ALSA就干了这样一件事。在android2.2上,Google将其视为掌上明珠、座上宾,将其加入了maintree,因此在android2.2上,在hardware层,大多公司选择了ALSA作为跟driver打交道的帮手,当然也有高通这些公司,一直坚持自己私有的一套东西。当然android还是蛮开放的,允许你自己来选择、实现!在2.2上编译出来的共享库为alsa.XXX.so,xxx可以为产品名称,也可以使用default,随即就是alsa.default.so。

   到了android2.3,变化了,ALSA被干掉了!!!可悲啊!Google居然写了自己的一套迷你接口!开源的ALSA虽然有很多东西你用不上,但是自己写一套迷你这样的接口也变成私有的了,不利于以后的发展,有一种忧虑是Google自己写的这一套东西能不能跟ALSA的release同步更新,能不能跟上这个脚本,这并非没有道理。如果使用Google写的迷你接口,就会出现driver还是使用ALSA的,user space使用Google的,感觉就是核是别人的,壳是自己的,这样工作是能工作,搭不搭啊?driver里出错了的情况下,Google的接口怎么办?没看见how to process,只是give up audio data。2.3里面对audio的操作,打开设备、关闭设备,非常频繁,不觉得很好。

   笔者通过比较2.3的audiofliger跟2.2的audiofliger后,分析后认为,2.3可以把2.2使用ALSA的hardware layer的code完全merge到2.3来工作,因为在audiofliger中,调用hal layer的接口没有发生变化,也算Google留了一手吧!

   到了最新的android4.0,Google整出来了一个tinyalsa,还稍微公道一点,还是沾上了alsa这几个字,只不过是tiny的。但是笔者分析了4.0的audiofliger后发现,audiofliger调用hal layer的接口发生了翻天覆地的变化,猛啊!4.0把play跟capture分得更开放了,自己管自己的,audiofliger都从原来3k来行,扩张到了5k多行,大动干戈啊!苦了的还是coder啊!从接口上来看,开放性更高了!当然hal layer需要大变样了!不过还是可以使用ALSA接口来实现。不管是ALSA,还是tinyalsa,归根结底是跟driver打交道的最后一关,跟hal layer的控制逻辑什么的关系不大,看到Samsung的参考代码就是使用了自己的一套实现。

    下面笔者就来分析下android4.0的audiofliger如何调用hal layer功能代码的:

调用关系解析:

AudioFliger.cpp

 

static int load_audio_interface(const char *if_name, const hw_module_t **mod,
                                audio_hw_device_t **dev)
{
    int rc;

/*decide audio.primary.XXX.so, XXX 为product名称,得到hw_module_t对象;
hw_get_module_by_class 来之于libhardware.so*/
    rc = hw_get_module_by_class(AUDIO_HARDWARE_MODULE_ID, if_name, mod);
    if (rc)
        goto out;

/*Open hw device,这样就会call到上一步对象中的hw_module_methods_t中注册的open函数,这样就进一步细化注册了众多audio的hardware接口;
audio_hw_device_open 是inline函数,会call回mod的open*/
    rc = audio_hw_device_open(*mod, dev);
    LOGE_IF(rc, "couldn't open audio hw device in %s.%s (%s)",
            AUDIO_HARDWARE_MODULE_ID, if_name, strerror(-rc));
    if (rc)
        goto out;

    return 0;

out:
    *mod = NULL;
    *dev = NULL;
    return rc;
}


  分析清楚了这种关系,我们只要去完善hal layer的代码即可,选哪种方式实现,是你的自由!就以后代码的移植性、兼容性来说,我还是觉得ALSA更好一些,学习的资料也更多,碰到了一些问题,还能Google出来帮忙,用私有的,能实现,麻烦还是会有的!

  一家之言,仅供参考!

 

目录
相关文章
|
26天前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
34 2
|
7天前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
|
14天前
|
安全 Linux Android开发
探索安卓与iOS的安全性差异:技术深度分析
本文深入探讨了安卓(Android)和iOS两个主流操作系统平台在安全性方面的不同之处。通过比较它们在架构设计、系统更新机制、应用程序生态和隐私保护策略等方面的差异,揭示了每个平台独特的安全优势及潜在风险。此外,文章还讨论了用户在使用这些设备时可以采取的一些最佳实践,以增强个人数据的安全。
|
1月前
|
IDE 开发工具 Android开发
安卓与iOS开发环境对比分析
本文将探讨安卓和iOS这两大移动操作系统在开发环境上的差异,从工具、语言、框架到生态系统等多个角度进行比较。我们将深入了解各自的优势和劣势,并尝试为开发者提供一些实用的建议,以帮助他们根据自己的需求选择最适合的开发平台。
28 1
|
2月前
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
【8月更文挑战第20天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着重要的位置。本文将深入探讨这两种操作系统的开发环境,从编程语言到开发工具,从用户界面设计到性能优化,以及市场趋势对开发者选择的影响。我们旨在为读者提供一个全面的比较视角,帮助理解不同平台的优势与挑战,并为那些站在选择十字路口的开发者提供有价值的参考信息。
|
2月前
|
开发框架 Android开发 Swift
安卓与iOS应用开发对比分析
【8月更文挑战第20天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文将深入探讨这两大操作系统在开发环境、编程语言、用户界面设计、性能优化及市场分布等方面的差异和特点。通过比较分析,旨在为开发者提供一个宏观的视角,帮助他们根据项目需求和目标受众选择最合适的开发平台。同时,文章还将讨论跨平台开发框架的利与弊,以及它们如何影响着移动应用的开发趋势。
|
2月前
|
安全 搜索推荐 Android开发
安卓与iOS应用开发的对比分析
【8月更文挑战第20天】在移动应用开发领域,安卓和iOS两大平台各领风骚。本文通过深入探讨两者的开发环境、编程语言、用户界面设计、应用市场及分发机制等方面的差异,揭示了各自的优势和挑战。旨在为开发者提供决策支持,同时帮助理解为何某些应用可能优先选择在一个平台上发布。
29 2
|
2月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的大舞台上,安卓与iOS两大操作系统各占半壁江山。本文将深入浅出地比较两者的开发环境,从开发工具、编程语言到用户界面设计等多个维度进行剖析,旨在为初入行的开发者们提供一盏明灯,帮助他们选择适合自己的开发路径。通过实例分析和数据支持,我们将揭示这两个平台的独特优势和潜在挑战,以及它们如何影响应用的性能和用户体验。
59 1
|
2月前
|
监控 Java 开发工具
如何快速对接Android平台GB28181接入模块(SmartGBD)
大牛直播SDK推出的Android平台GB28181接入SDK(SmartGBD),可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终端等场景,可能是业内为数不多功能齐全性能优异的商业级水准GB28181接入SDK。
|
2月前
|
编解码 开发工具 Android开发
Android平台RTMP直播推送模块技术接入说明
大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行业的使用场景。RTMP直播推送模块数据源,支持编码前、编码后数据对接
下一篇
无影云桌面