当前位置: 首页 > news >正文

车机音频参数下发流程

比如以audioControlWrapper.setParametersToAmp(keyPairValues); 下发banlance为例,链路如下

=========================================================================

hal层

1. AudioControl.cpp    hardware\interfaces\automotive\audiocontrol\aidl\default\AudioControl.cpp


ndk::ScopedAStatus AudioControl::setParametersToAmp(const std::string &keyPairValues)

ndk::ScopedAStatus AudioControl::gvmSetParameters(const hidl_string& key, const hidl_string& value) const


2. AudioDevice.cpp    vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\AudioDevice.cpp

int AudioDevice::SetParameters(const char *kvpairs) 

ret = dynaudio_control_interface_->setParameter((void *)kvpairs);

3. DynAudioControl.cpp    vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\src\DynAudioControl.cpp

int32_t DynAudioControl::setParameter(void* params)

GVMWrapper   pWrapper->setParameter(params);

4. GVMWrapper.cpp    vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\Wrapper\GVMWrapper.cpp
int32_t GVMWrapper::setParameter(void *params)

    auto iter = gSetParmsHandlerTable.find(key);
    if (iter != gSetParmsHandlerTable.end()) {
        auto s = Utils::splitString2Vector(value, DELIM_DEFAULT);
        LOG_I("[%s]: Key is %s", __func__, iter->first.c_str());
        ret = (this->*(iter->second))(s);
    }
    
在 gSetParmsHandlerTable 中通过AC_KEY_AUDIO_SOURCE

调用 setBalance

5. GVMAudioLogic.cpp    vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\AudioLogic\GVMAudioLogic.cpp

在int32_t GVMAudioLogic::setBalance(uint32_t source, int32_t step) 中调用sendAudioHalParam(AC_OP_SET_BALANCE, DOUBLE_PARAMS, source, step);

在 sendAudioHalParam 中通过audio_fdbus_client_->sendAudioMsg给qnx发消息


=========================================================================

qnx 层

1. faudiohal_server.cpp    qnx_app\workspace\modules\audio\audio_manager_ipc\fdbus_server\src\faudiohal_server.cpp

void AudioFdbusService::onInvoke(CBaseJob::Ptr &msg_ref)

2. msg_switch_logic.cpp    qnx_app\workspace\modules\audio\audio_manager_ipc\logic\src\msg_switch_logic.cpp    

int32_t SwitchMsgHandler::sendAudioHALMsgToAudioManager(AudioFdbusMsg &audiohal_param)

            return AudioManagerProxy::getInstance()->send(audiohal_param.operation_code, (void*)audiohal_param.params,
                        audiohal_param.params_count * sizeof(uint32_t));

=========================================================================
 

http://www.lryc.cn/news/533388.html

相关文章:

  • 大模型推理——MLA实现方案
  • redis之GEO 模块
  • 21.2.7 综合示例
  • 使用Docker + Ollama在Ubuntu中部署deepseek
  • 【C语言标准库函数】三角函数
  • CNN-day9-经典神经网络ResNet
  • 淘宝分类详情数据获取:Python爬虫的高效实现
  • 机器学习 —— 深入剖析线性回归模型
  • 33.日常算法
  • #渗透测试#批量漏洞挖掘#微商城系统 goods SQL注入漏洞
  • 【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命
  • Vision Transformer学习笔记(2020 ICLR)
  • 一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路
  • 25/2/8 <机器人基础> 阻抗控制
  • golang 开启HTTP代理认证
  • 详解Nginx no live upstreams while connecting to upstream
  • Open3d Qt的环境配置
  • 5.Python字典和元组:字典的增删改查、字典遍历、访问元组、修改元组、集合(set)
  • 深度学习系列--04.梯度下降以及其他优化器
  • 2022java面试总结,1000道(集合+JVM+并发编程+Spring+Mybatis)的Java高频面试题
  • Ubuntu MKL(Intel Math Kernel Library)
  • 消费电子产品中的噪声对TPS54202的影响
  • 第四十章:职场转折:突破困境,重新出发
  • c++ 不定参数,不定类型的 max,min 函数
  • 数据库的关系代数
  • VSCode使用总结
  • 关系模型的数据结构及形式化定义
  • 【C++入门讲解】
  • 数据表中的视图操作
  • BFS算法篇——广度优先搜索,探索未知的旅程(上)