linuxOS_D21X/doc/topics/sdk/audio_codec/audio-codec-architecture.html
2025-01-23 16:35:08 +08:00

237 lines
35 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" data-whc_version="27.0">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="description" content="ALSA 软件架构 Linux 中的音频采用 ALSA 驱动框架,该框架管理 Linux 下所有与音频相关的资源codec 的驱动按照 ALSA 框架进行设计开发。ALSA 整体框架如下图: 如上图ALSA 音频框架将底层的硬件驱动分为三部分machine、platform 与 codec。三者的关系如下图所示 platform driver 包含了 soc 平台的音频 DMA ..."/><meta name="DC.rights.owner" content="(C) 版权 2025"/><meta name="copyright" content="(C) 版权 2025"/><meta name="generator" content="DITA-OT"/><meta name="DC.type" content="concept"/><meta name="DC.relation" content="../../../topics/sdk/audio_codec/audio-codec-design_intro.html"/><meta name="DC.relation" content="../../../topics/sdk/audio_codec/audio-codec-design_intro.html"/><meta name="DC.relation" content="../../../topics/sdk/audio_codec/audio-codec-key_procedures.html"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.creator" content="yan.wang"/><meta name="DC.date.modified" content="2024-01-15"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="audio_codec_architecture"/><meta name="DC.language" content="zh-CN"/><title>Audio Codec 架构</title><!-- Generated with build number 2024112209. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content="audio_codec_architecture-d4445e5876"/><meta name="wh-source-relpath" content="topics/sdk/audio_codec/audio-codec-architecture.dita"/><meta name="wh-out-relpath" content="topics/sdk/audio_codec/audio-codec-architecture.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2024112209"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2024112209"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250123154945"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2024112209"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250123154945"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2024112209"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2024112209"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2024112209"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2024112209"/></head>
<body id="audio_codec_architecture" class="wh_topic_page frmBody">
<a href="#wh_topic_body" class="sr-only sr-only-focusable">
跳转到主要内容
</a>
<header class="navbar navbar-default wh_header">
<div class="container-fluid">
<div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
<div class="wh_logo_and_publication_title_container">
<div class="wh_logo_and_publication_title">
<a href="http://www.artinchip.com" class=" wh_logo d-none d-sm-block "><img src="../../../company-logo-white.png" alt=" Linux SDK 使用指南 SDK 指南文件 "/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"> <span class="ph mainbooktitle">Linux SDK 使用指南</span> <span class="ph booktitlealt">SDK 指南文件</span> </span></a></div>
</div>
</div>
<div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
</div>
</div>
</div>
</header>
<div class=" wh_search_input navbar-form wh_topic_page_search search " role="form">
<form id="searchForm" method="get" role="search" action="../../../search.html"><div><input type="search" placeholder="搜索 " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="搜索查询" required="required"/><button type="submit" class="wh_search_button" aria-label="搜索"><span class="search_input_text">搜索</span></button></div></form>
</div>
<div class="container-fluid" id="wh_topic_container">
<div class="row">
<nav class="wh_tools d-print-none navbar-expand-md" aria-label="Tools">
<div data-tooltip-position="bottom" class=" wh_breadcrumb "><ol class="d-print-none"><li><span class="home"><a href="../../../index.html"><span>主页</span></a></span></li><li><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div></li><li><div class="topicref" data-id="concept_mcc_32s_nbc"><div class="title"><a href="../../../topics/chapter-title/chapter-multi-media-sdk.html">多媒体</a><div class="wh-tooltip"><p class="shortdesc">GE、VE、Display、DVP、MPP、MPP 播放器等多媒体模块的介绍和使用说明。</p></div></div></div></li><li><div class="topicref" data-id="audio_codec_user_guide"><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-user-guide.html">Audio Codec 使用指南</a></div></div></li><li><div class="topicref" data-id="audio_codec_design_intro"><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-design_intro.html">设计说明</a></div></div></li><li class="active"><div class="topicref" data-id="audio_codec_architecture"><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-architecture.html">Audio Codec 架构</a></div></div></li></ol></div>
<div class="wh_right_tools">
<button class="wh_hide_highlight" aria-label="切换搜索突出显示" title="切换搜索突出显示"></button>
<button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="折叠截面" title="折叠截面"></button>
<div class=" wh_navigation_links "><span id="topic_navigation_links" class="navheader">
<span class="navprev"><a class="- topic/link link" href="../../../topics/sdk/audio_codec/audio-codec-design_intro.html" title="设计说明" aria-label="上一主题: 设计说明" rel="prev"></a></span>
<span class="navnext"><a class="- topic/link link" href="../../../topics/sdk/audio_codec/audio-codec-key_procedures.html" title="关键流程设计" aria-label="下一主题: 关键流程设计" rel="next"></a></span> </span></div>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
<button type="button" id="wh_toc_button" class="custom-toggler navbar-toggler collapsed wh_toggle_button navbar-light" aria-expanded="false" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<nav id="wh_publication_toc" class="col-lg-3 col-md-3 col-sm-12 d-md-block d-none d-print-none" aria-label="Table of Contents Container">
<div id="wh_publication_toc_content">
<div class=" wh_publication_toc " data-tooltip-position="right"><span class="expand-button-action-labels"><span id="button-expand-action" role="button" aria-label="Expand"></span><span id="button-collapse-action" role="button" aria-label="Collapse"></span><span id="button-pending-action" role="button" aria-label="Pending"></span></span><ul role="tree" aria-label="Table of Contents"><li role="treeitem"><div data-tocid="revinfo_linux-d4445e1079" class="topicref" data-id="revinfo_linux" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/revinfo/revinfo_linux.html" id="revinfo_linux-d4445e1079-link">修订记录</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1096" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1096-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/env/sdk-compile.html" id="id-d4445e1096-link">SDK 编译</a><div class="wh-tooltip"><p class="shortdesc">介绍不同编译环境下 SDK 的详细编译流程。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="tocId-d4445e1240" class="topicref" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action tocId-d4445e1240-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/lb_usage_commands.html" id="tocId-d4445e1240-link">使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_rcx_czh_pzb-d4445e1360" class="topicref" data-id="concept_rcx_czh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_rcx_czh_pzb-d4445e1360-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-app.html" id="concept_rcx_czh_pzb-d4445e1360-link">应用场景</a><div class="wh-tooltip"><p class="shortdesc">描述了 SDK 在不同应用场景中的配置和使用包括系统更新、OTA、安全方案等。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1678" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1678-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/peripheral/peripheral-intro.html" id="id-d4445e1678-link">外设移植</a><div class="wh-tooltip"><p class="shortdesc"><span class="ph">触摸屏、显示器、WIFI 模块、按键</span>等外设的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e1964" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e1964-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/bringup/chapter-bringup.html" id="id-d4445e1964-link">BringUp</a><div class="wh-tooltip"><p class="shortdesc">在硬件上电后快速初始化系统,为操作系统的启动准备好必要的硬件环境。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="id-d4445e2153" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d4445e2153-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html" id="id-d4445e2153-link">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="false"><div data-tocid="uBoot-d4445e2170" class="topicref" data-id="uBoot" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action uBoot-d4445e2170-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/uboot-module.html" id="uBoot-d4445e2170-link">U-Boot</a><div class="wh-tooltip"><p class="shortdesc">启动支持的基本功能以及运行时的基本硬件环境。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_mtx_tk3_pzb-d4445e3028" class="topicref" data-id="concept_mtx_tk3_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_mtx_tk3_pzb-d4445e3028-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/linux/chapter_linux.html" id="concept_mtx_tk3_pzb-d4445e3028-link">Linux</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-system-d4445e3198" class="topicref" data-id="chapter-system" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-system-d4445e3198-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-system.html" id="chapter-system-d4445e3198-link">系统</a><div class="wh-tooltip"><p class="shortdesc"></p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-memory-d4445e4054" class="topicref" data-id="chapter-memory" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-memory-d4445e4054-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-memory-sdk.html" id="chapter-memory-d4445e4054-link">存储</a><div class="wh-tooltip"><p class="shortdesc">SDMC、SPI NAND、SPI NOR 等存储模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="concept_mcc_32s_nbc-d4445e4438" class="topicref" data-id="concept_mcc_32s_nbc" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action concept_mcc_32s_nbc-d4445e4438-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-multi-media-sdk.html" id="concept_mcc_32s_nbc-d4445e4438-link">多媒体</a><div class="wh-tooltip"><p class="shortdesc">GE、VE、Display、DVP、MPP、MPP 播放器等多媒体模块的介绍和使用说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="false"><div data-tocid="ge-d4445e4455" class="topicref" data-id="ge" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action ge-d4445e4455-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/ge/ge_user_guide.html" id="ge-d4445e4455-link">GE 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="ve-d4445e4637" class="topicref" data-id="ve" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action ve-d4445e4637-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/ve/ve-user-guide.html" id="ve-d4445e4637-link">VE 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d4445e4777" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d4445e4777-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/display/display_user_guide.html" id="id-d4445e4777-link">Display 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_h4d_fwt_tzb-d4445e5218" class="topicref" data-id="concept_h4d_fwt_tzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_h4d_fwt_tzb-d4445e5218-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/dvp/dvp_user_guide.html" id="concept_h4d_fwt_tzb-d4445e5218-link">DVP 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="mpp-d4445e5358" class="topicref" data-id="mpp" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action mpp-d4445e5358-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mpp_user_guide.html" id="mpp-d4445e5358-link">MPP 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="mpp_0-d4445e5498" class="topicref" data-id="mpp_0" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action mpp_0-d4445e5498-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mpp_player_user_guide.html" id="mpp_0-d4445e5498-link">MPP 播放器使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="gstreamer-d4445e5582" class="topicref" data-id="gstreamer" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action gstreamer-d4445e5582-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/gstreamer/gstreamer-user-guide.html" id="gstreamer-d4445e5582-link">Gstreamer 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="i2s-d4445e5680" class="topicref" data-id="i2s" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action i2s-d4445e5680-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/i2s/i2s_user_guide.html" id="i2s-d4445e5680-link">I2S 使用指南</a></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="audio_codec_user_guide-d4445e5806" class="topicref" data-id="audio_codec_user_guide" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action audio_codec_user_guide-d4445e5806-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-user-guide.html" id="audio_codec_user_guide-d4445e5806-link">Audio Codec 使用指南</a></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem"><div data-tocid="audio_codec_configuration-d4445e5820" class="topicref" data-id="audio_codec_configuration" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-configuration.html" id="audio_codec_configuration-d4445e5820-link">Audio Codec 配置</a></div></div></li><li role="treeitem"><div data-tocid="audio_codec_debug_guide-d4445e5834" class="topicref" data-id="audio_codec_debug_guide" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-debug_guide.html" id="audio_codec_debug_guide-d4445e5834-link">调试指南</a></div></div></li><li role="treeitem"><div data-tocid="audio_codec_test_guide-d4445e5848" class="topicref" data-id="audio_codec_test_guide" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-test_guide.html" id="audio_codec_test_guide-d4445e5848-link">测试指南</a></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="audio_codec_design_intro-d4445e5862" class="topicref" data-id="audio_codec_design_intro" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action audio_codec_design_intro-d4445e5862-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-design_intro.html" id="audio_codec_design_intro-d4445e5862-link">设计说明</a></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" class="active"><div data-tocid="audio_codec_architecture-d4445e5876" class="topicref" data-id="audio_codec_architecture" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-architecture.html" id="audio_codec_architecture-d4445e5876-link">Audio Codec 架构</a></div></div></li><li role="treeitem"><div data-tocid="audio_codec_key_procedures-d4445e5890" class="topicref" data-id="audio_codec_key_procedures" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-key_procedures.html" id="audio_codec_key_procedures-d4445e5890-link">关键流程设计</a></div></div></li><li role="treeitem"><div data-tocid="audio_codec_data_structure_design-d4445e5904" class="topicref" data-id="audio_codec_data_structure_design" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-data_structure_design.html" id="audio_codec_data_structure_design-d4445e5904-link">数据结构设计</a></div></div></li><li role="treeitem"><div data-tocid="audio_codec_interface_design-d4445e5918" class="topicref" data-id="audio_codec_interface_design" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-codec-interface_design.html" id="audio_codec_interface_design-d4445e5918-link">接口设计</a></div></div></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="tocId-d4445e5932" class="topicref" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action tocId-d4445e5932-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio_codec/audio-fail-to-find-alsa.conf-file.html" id="tocId-d4445e5932-link">常见问题</a></div></div></li></ul></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_nww_hzh_pzb-d4445e5947" class="topicref" data-id="concept_nww_hzh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_nww_hzh_pzb-d4445e5947-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-interface-sdk.html" id="concept_nww_hzh_pzb-d4445e5947-link">接口</a><div class="wh-tooltip"><p class="shortdesc">CAN、CIR、GPAI、GPIO、I2C、PSADC、PWM 等接口模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-safety-d4445e7944" class="topicref" data-id="chapter-safety" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-safety-d4445e7944-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-safety-sdk.html" id="chapter-safety-d4445e7944-link">安全</a><div class="wh-tooltip"><p class="shortdesc">SPI ENC、CE、eFuse 等安全模块的介绍和使用说明。</p></div></div></div></li></ul></li></ul></div>
</div>
</nav>
<div class="col-lg-7 col-md-9 col-sm-12" id="wh_topic_body">
<button id="wh_close_publication_toc_button" class="close-toc-button d-none" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<button id="wh_close_topic_toc_button" class="close-toc-button d-none" aria-label="Toggle topic table of content" aria-controls="wh_topic_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<div class=" wh_topic_content body "><main role="main"><article class="- topic/topic concept/concept topic concept" role="article" aria-labelledby="ariaid-title1">
<span class="edit-link" style="font-size:12px; opacity:0.6; text-align:right; vertical-align:middle"><a target="_blank" title="Edit this document" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/audio_codec/audio-codec-architecture.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">Audio Codec 架构</h1>
<div class="date inPage">15 Jan 2024</div><div style="color: gray;">
Read time: 2 minute(s)
</div>
<div class="- topic/body concept/conbody body conbody">
<section class="- topic/section section" id="audio_codec_architecture__section_qdh_21n_d1c" data-ofbid="audio_codec_architecture__section_qdh_21n_d1c"><h2 class="- topic/title title sectiontitle">ALSA 软件架构</h2><p class="- topic/p p" data-ofbid="d192640e36__20250123155221">Linux 中的音频采用 ALSA 驱动框架,该框架管理 Linux 下所有与音频相关的资源codec 的驱动按照 ALSA 框架进行设计开发。ALSA 整体框架如下图:</p><div class="- topic/p p" data-ofbid="d192640e38__20250123155221"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="audio_codec_architecture__image_rdh_21n_d1c" src="../../../images/audio/audio_alsa_structure.png" alt="alsa"/></div><br/></div><p class="- topic/p p" data-ofbid="d192640e44__20250123155221">如上图ALSA 音频框架将底层的硬件驱动分为三部分machine、platform 与 codec。三者的关系如下图所示</p><div class="- topic/p p" data-ofbid="d192640e46__20250123155221"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="audio_codec_architecture__image_sdh_21n_d1c" src="../../../images/audio/machine_codec_platform.png" alt="machine_codec_platform"/></div><br/></div><p class="- topic/p p" data-ofbid="d192640e52__20250123155221">platform driver 包含了 soc 平台的音频 DMA 和数字音频接口
(I2S、PCM、SPDIF、AC97 等)的配置和管理,它不包含任何与板子或机器相关的代码,该部分驱动由 SoC 厂商实现。</p><p class="- topic/p p" data-ofbid="d192640e54__20250123155221">codec
driver 的一个重要原则就是要求 codec 驱动的平台无关性。它包含音频控件、音频接口、DAPM 的定义等。codec 的驱动一般由 IC 厂商实现。</p><p class="- topic/p p" data-ofbid="d192640e56__20250123155221">machine driver 主要是针对设备的,主要作用有三个: 1. 实现 codec 和 platform 的耦合machine
driver 是板级上的 codec 和 SOC 之间的桥梁,描述二者如何连接。 2. 负责处理机器特有的的一些控件和音频事件(如板子上需要打开放大器等)。 3.
创建声卡。一般板卡的设计者只需要实现这部分的驱动。</p><p class="- topic/p p" data-ofbid="d192640e58__20250123155221">单独的 driver 和 codec driver 是不能工作的,必须由 driver 把它们结合在一起才能完成整个设备的音频处理工作。ALSA 框架将底层硬件划分为三部分后,使得 platform 和 codec 的驱动实现变得更加简单,二者依靠 dai 和 codec_dai 进行数据传输。这种结构下的音频数据流通路径如下:</p><div class="- topic/p p" data-ofbid="d192640e60__20250123155221"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="audio_codec_architecture__image_tdh_21n_d1c" src="../../../images/audio/alsa_data_flow.png" width="480" alt="data_flow"/></div><br/></div></section>
<section class="- topic/section section" id="audio_codec_architecture__section_udh_21n_d1c" data-ofbid="audio_codec_architecture__section_udh_21n_d1c"><h2 class="- topic/title title sectiontitle">AIC 实现架构</h2><p class="- topic/p p" data-ofbid="d192640e70__20250123155221">与常见的 codec 芯片不同AIC 的 AudioCodec 是 SOC 内置的一个模块,音频数据可以直接传输到 AudioCodec 模块,而不需要 S 这类音频接口。AudioCodec 的音频数据流通路径如下:</p><div class="- topic/p p" data-ofbid="d192640e72__20250123155221"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="audio_codec_architecture__image_vdh_21n_d1c" src="../../../images/audio/audio_codec_data_flow.png" alt="aic_data_flow"/></div><br/></div><p class="- topic/p p" data-ofbid="d192640e78__20250123155221">若是一颗单独的 codec 芯片,只需要实现相应的 driverplatform driver 由 SOC 厂商实现machine
driver 由板级开发者实现,并最终创建声卡。但是 AudioCodec 本身就是 SOC 中的一个模块,不需要 S 等音频接口进行数据传输,也不需要再单独实现 driver所以在实现 SOC 内置的 AudioCodec 模块的驱动时,除了实现音频通路控制和音频控件外,还需要实现声卡的创建,以便用户可以直接使用 AudioCodec 模块的驱动进行录音和播放。</p><p class="- topic/p p" data-ofbid="d192640e80__20250123155221">AudioCodec 模块不需要 S 接口,所以在驱动实现中并没有严格意义上的 dai。但是 ALSA 框架在创建声卡时,需要根据 dai 和 codec_dai 的名字进行查找匹配,查找不到则不能创建声卡。所以为了能成功创建声卡,在 AudioCodec 的驱动实现中需要创建一个 dai该 dai 的作用是为了 platform 和 codec 的耦合,并不能对该 dai 进行任何操作。</p><p class="- topic/p p" data-ofbid="d192640e82__20250123155221">综上AIC 的 AudioCodec 模块的驱动实现可以分为三部分:</p><ol class="- topic/ol ol" id="audio_codec_architecture__ol_wdh_21n_d1c" data-ofbid="audio_codec_architecture__ol_wdh_21n_d1c">
<li class="- topic/li li" data-ofbid="d192640e86__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e88__20250123155221">platform driver 的实现:</p>
<ul class="- topic/ul ul" id="audio_codec_architecture__ul_xdh_21n_d1c" data-ofbid="audio_codec_architecture__ul_xdh_21n_d1c">
<li class="- topic/li li" data-ofbid="d192640e93__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e95__20250123155221">dma 的注册和管理,用于在内存和 AudioCodec 之间传输数据</p>
</li>
<li class="- topic/li li" data-ofbid="d192640e99__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e101__20250123155221">cpu_dai 部分的定义,用于实现和 driver 的耦合</p>
</li>
</ul>
</li>
<li class="- topic/li li" data-ofbid="d192640e107__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e109__20250123155221">codec driver 的实现:</p>
<ul class="- topic/ul ul" id="audio_codec_architecture__ul_ydh_21n_d1c" data-ofbid="audio_codec_architecture__ul_ydh_21n_d1c">
<li class="- topic/li li" data-ofbid="d192640e114__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e116__20250123155221">codec_dai 的注册和管理,用于实现和 driver 的耦合,以及对 AudioCodec 模块频率、采样率、采样深度的设置</p>
</li>
<li class="- topic/li li" data-ofbid="d192640e120__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e122__20250123155221">DAPM 音频路径和音频控件的管理</p>
</li>
</ul>
</li>
<li class="- topic/li li" data-ofbid="d192640e128__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e130__20250123155221">machine driver 的实现:</p>
<ul class="- topic/ul ul" id="audio_codec_architecture__ul_zdh_21n_d1c" data-ofbid="audio_codec_architecture__ul_zdh_21n_d1c">
<li class="- topic/li li" data-ofbid="d192640e135__20250123155221">
<p class="- topic/p p" data-ofbid="d192640e137__20250123155221">用于实现 platform 和 codec 的耦合,并创建声卡</p>
</li>
</ul>
</li>
</ol></section>
</div>
</article></main></div>
</div>
<nav role="navigation" id="wh_topic_toc" aria-label="On this page" class="col-lg-2 d-none d-lg-block navbar d-print-none">
<div id="wh_topic_toc_content">
<div class=" wh_topic_toc "><div class="wh_topic_label">在本页上</div><ul><li class="section-item"><div class="section-title"><a href="#audio_codec_architecture__section_qdh_21n_d1c" data-tocid="audio_codec_architecture__section_qdh_21n_d1c">ALSA 软件架构</a></div></li><li class="section-item"><div class="section-title"><a href="#audio_codec_architecture__section_udh_21n_d1c" data-tocid="audio_codec_architecture__section_udh_21n_d1c">AIC 实现架构</a></div></li></ul></div>
</div>
</nav>
</div>
</div>
</div>
<footer class="navbar navbar-default wh_footer">
<div class=" footer-container mx-auto ">
<title>footer def</title>
<style><!--
.p1 {
font-family: FangZhengShuSong, Times, serif;
}
.p2 {
font-family: Arial, Helvetica, sans-serif;
}
.p3 {
font-family: "Lucida Console", "Courier New", monospace;
}
--></style>
<div class="webhelp.fragment.footer">
<p class="p1">Copyright © 2019-2024 广东匠芯创科技有限公司. All rights reserved.</p>
</div><div>
<div class="generation_time">
Update Time: 2025-01-23
</div>
</div>
</div>
</footer>
<button id="go2top" class="d-print-none" title="返回顶部">
<span class="oxy-icon oxy-icon-up"></span>
</button>
<div id="modal_img_large" class="modal">
<span class="close oxy-icon oxy-icon-remove"></span>
<div id="modal_img_container"></div>
<div id="caption"></div>
</div>
<script src="${pd}/publishing/publishing-styles-AIC-template/js/custom.js" defer="defer"></script>
</body>
</html>