在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony支持HDMI接口聲卡適配說明

OpenAtom OpenHarmony ? 來源:未知 ? 2023-05-23 07:05 ? 次閱讀

點擊藍字 ╳ 關注我們


開源項目 OpenHarmony
是每個人的 OpenHarmony

陳甲印

鴻湖萬聯資深技術專家

鴻湖萬聯產品推薦


高清多媒體接口(High Definition Multimedia Interface,HDMI )是一種全數字化視頻和聲音發送接口,可以發送未壓縮的音頻及視頻信號。HDMI可用于機頂盒、DVD播放機、個人計算機、電視、游戲主機、綜合擴大機、數字音響與電視機等設備。HDMI可以同時發送音頻和視頻信號,由于音頻和視頻信號采用同一條線材,大大簡化系統線路的安裝難度。這塊是百度百科對HDMI的簡單介紹,我們再看看HDMI不同版本對音頻的支持情況:


當前我們使用最多的是2.0版本,本文介紹了OpenHarmony系統支持HDMI聲卡的適配過程,帶有HDMI聲卡的設備包括電視、投影儀和一些帶有音響的顯示器。

1 功能描述

OpenHarmony系統中音頻系統使用ADM框架,下面是ADM框架的組成:


ADM框架是基于HDF系統框架開發,Card Manager是用來管理多個聲卡鏈表,Controller是聲卡的控制模塊包含了音量、靜音、通路選擇等控制功能。
Audio Control Dispath是控制功能的中轉站負責接收HDI下發的控制命令和將控制命令轉發給各個聲卡組件。Audio Stream Dispatch是數據流的中轉站,播放過程中負責接收HDI的數據流,在錄音過程中負責上傳聲卡的錄音數據流。
Run Time Device中包括的這些模塊就是一個聲卡工作需要的驅動服務。其中codec編解碼模塊驅動服務、dai數字音頻接口驅動服務和platform片上系統也就是DMA模塊驅動服務是大多數聲卡所必須的。
HDMI聲卡和其他聲卡一樣由三個模塊組成codec編解碼模塊、dai數字音頻接口和platform片上系統也就是DMA模塊。HDMI的codec是集成在HDMI轉換芯片內部的我們只需要將PCM音頻流給到HDMI轉換芯片就可以。DAI這塊使用的是I2S總線連接HDMI芯片和platform。要實現對HDMI聲卡的支持,就需要將這幾個模塊的驅動注冊到ADM框架中。
本文基于3月1日的OpenHarmony master分支進行介紹?;趛angfan平臺介紹,如適配其他平臺相關配置根據具體平臺進行修改。
OpenHarmony系統支持HDMI聲卡的插拔識別,支持HDMI聲卡的播放功能,包括啟動、停止、暫停、恢復功能。

2 準備工作

2.1 查詢物理連接

這是一個HDMI設備模塊的邏輯試圖,圖中可以看到音頻數據可以通過兩種接口I2S或者SPIDIF將音頻數據傳給HDMI設備,此處我們使用的是I2S總線。


首先需要查看芯片手冊HDMI模塊和SOC是如何連接的,找到音頻數據傳輸相應的I2S總線,這塊是更具rk3568芯片查到的數據,I2S0連接的是HDMI。


2.2 查詢寄存器地址
因為我們使用I2S總線就要對其進行配置所以我們需要找到I2S總線的基地址和I2S總線的寄存器說明。查看芯片手冊找到I2S總線對應的寄存器基地址。


3 代碼介紹

HDMI的驅動codec的代碼ADM框架中已經實現了,我們只需要根據不同的單板平臺修改平臺下面的配置文件。Dai和platform的驅動代碼需要根據各自平臺自行開發。yangfan開發板Dai和platform驅動代碼路徑在deviceoardisoftstoneyangfankernelhdfdriversaudio下面的dai和soc目錄下面。
涉及到的配置文件如下:
vendor/isoftstone/yangfan/hdf_config/khdf/audio$ tree
├── audio_config.hcs   // 此配置文件配置聲卡信息
├── codec_config.hcs // 此配置文件配置codec信息
├── dai_config.hcs // 此配置文件配置dai信息
└── dma_config.hcs // 此配置文件配置platform信息
vendor/isoftstone/yangfan/hdf_config/khdf/device_info/
device_info.hcs//此配置文件配置聲卡驅動服務信息
修改涉及的代碼倉:device_board_hihope、vendor_isoftstone和kernel_linux_config

4 構建開關

OpenHarmony系統要支持HDMI聲卡首先要打開構建開關:在文件kernel/linux/config/linux-5.10/arch/arm64/configs/rockchip_standard_defconfig
添加:CONFIG_DRIVERS_HDF_AUDIO_HDMI=y

5 功能配置

HCS(HDF Configuration Source)是HDF驅動框架的配置描述源碼,內容以Key-Value為主要形式。它實現了配置代碼與驅動代碼解耦,便于開發者進行配置管理。

5.1 配置文件:device_info.hcs 添加hdmi聲卡節點信息。
文件路徑:
vendor/isoftstone/yangfan/hdf_config/khdf/device_info/
HDMI聲卡插入后系統會根據此處配置的聲卡節點加載HDMI聲卡驅動。
        audio :: host {
hostName = "audio_host";
priority = 110;
device_dai :: device {...
device_hdmi :: deviceNode {
policy = 1;
priority = 50;
preload = 0;
permission = 0666;
moduleName = "DAI_RK3568";
serviceName = "hdmi_dai_service";
deviceMatchAttr = "hdf_hdmi_dai_driver";
}
}
device_codec :: device {...
device_hdmi :: deviceNode {
policy = 1;
priority = 50;
preload = 0;
permission = 0666;
moduleName = "AUDIO_HDMI_CODEC";
serviceName = "codec_service_1";
deviceMatchAttr = "hdf_codec_driver_1";
}
...
}
...
device_dma :: device {...
device_hdmi :: deviceNode {
policy = 1;
priority = 50;
preload = 0;
permission = 0666;
moduleName = "DMA_RK3568";
serviceName = "hdmi_dma_service_0";
deviceMatchAttr = "hdf_hdmi_dma_driver";
}
...
}


device_audio :: device {...
device_hdmi :: deviceNode {
policy = 2;
priority = 60;
preload = 2;
permission = 0666;
moduleName = "HDF_AUDIO";
deviceMatchAttr = "hdf_audio_driver_1";
serviceName = "hdf_audio_codec_hdmi_dev0";
}
...
}
...
}
moduleName 配置組件名稱,和驅動代碼中的moduleName相對應,系統會根據此名稱加載驅動。
deviceMatchAttr私有配置的屬性名稱,根據此名稱可以找到相應的私有配置。
serviceName驅動服務名稱,根據此名稱可以使用對應的驅動。
preload 配置加載方式,2為動態加載,當HDMI聲卡插入時加載HDMI聲卡驅動。
此文件中首先配置了文件首先先配置了HDMI的dai、codec和dma驅動服務,最后配置了HDMI聲卡設備。

5.2 配置文件:audio_config.hcs 添加hdmi聲卡服務信息。
文件路徑:vendor/isoftstone/yangfan/hdf_config/khdf/audio/
此處配置一個HDMI聲卡驅動包括哪些驅動服務。
root {
platform {
...
controller_0x120c1001 :: card_controller {
match_attr = "hdf_audio_driver_1";
serviceName = "hdf_audio_codec_hdmi_dev0";
codecName = "codec_service_1";
platformName = "hdmi_dma_service_0";
cpuDaiName = "hdmi_dai_service";
codecDaiName = "hdmi_codec_dai";
}
...
}
}
card_controller配置項根據聲卡包含的驅動服務進行配置,不同聲卡包含的驅動服務可能不同,HDMI聲卡包含platform、dai和codec所以需要配置codecName codec驅動服務名稱,platformName platform驅動服務名稱、cpuDaiName platform側dai服務名稱、codecDaiName codec側驅動服務名稱。
match_attr配置項名稱和HDMI聲卡設備的私有配置名稱相匹配,聲卡設備可以根據這個私有配置找到聲卡對應的codec、dai、platform驅動服務。
serviceName HDMI聲卡服務名稱,聲卡加載成功后會生成/dev/hdf_audio_codec_hdmi_dev0結點。

5.3 配置文件:dma_config.hcs 添加HDMI聲卡硬件信息。
文件路徑:vendor/isoftstone/yangfan/hdf_config/khdf/audio/
此文件配置和HDMI聲卡連接的SOC側的DMA信息。具體信息可以通過查看cpu芯片手冊得到。
root {
platform {
template dma_controller {
match_attr = "";
serviceName = "";
}
...
controller_0x120c1011 :: dma_controller {
match_attr = "hdf_hdmi_dma_driver";
serviceName = "hdmi_dma_service_0";


idInfo {
chipName = "/i2s@fe400000"; // 根據hdmi驅動芯片連接的I2S總線地址進行配置
chipIdRegister = 0xfe400000; // 根據hdmi驅動芯片連接的I2S總線地址進行配置
chipIdSize = 0x1000;
}
regConfig {
daiStartupSeqConfig = [
0x00, 0x00, 0, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0x0, //Transmit Operation Init
];
}
}
}
}
此文件配置了HDMI聲卡使用的dma信息。
match_attr配置項名稱和HDMI聲卡設備的dma服務私有配置名稱相匹配。serviceName HDMI聲卡dma驅動服務名稱需要和device_info配置文件中HDMI聲卡的dma驅動服務名稱相同。
HDMI模塊只需要配置idInfo配置項信息,其他配置項HDMI模塊未使用。

5.4 配置文件:dai_config.hcs 添加HDMI聲卡硬件信息。
文件路徑:vendor/isoftstone/yangfan/hdf_config/khdf/audio/
此文件配置和HDMI聲卡連接的SOC側的i2s信息。具體信息可以通過查看cpu芯片手冊得到。
root {
platform {
template dai_controller {
match_attr = "";
serviceName = "";
}
...
controller_0x120c1021 :: dai_controller {
match_attr = "hdf_hdmi_dai_driver";
serviceName = "hdmi_dai_service";


idInfo {
chipName = "/i2s@fe400000"; // 根據hdmi驅動芯片連接的I2S總線地址進行配置
chipIdRegister = 0xfe400000; // 根據hdmi驅動芯片連接的I2S總線地址進行配置
chipIdSize = 0x1000;
}
regConfig {
daiStartupSeqConfig = [
0x00, 0x00, 0, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0x0, //Transmit Operation Init
];
}
}
}
}
此文件配置了HDMI聲卡使用的dai信息。match_attr配置項名稱和HDMI聲卡設備的dai服務私有配置名稱相匹配。serviceName HDMI聲卡dai驅動服務名稱需要和device_info配置文件中HDMI聲卡的dai驅動服務名稱相同。
chipIdRegister HDMI驅動芯片連接的I2S總線地址,此信息可以通過cpu的芯片手冊獲取。
chipIdSize物理地址映射的虛擬地址大小。

5.5 配置文件:codec_config.hcs 添加HDMI聲卡硬件信息。
文件路徑:vendor/isoftstone/yangfan/hdf_config/khdf/audio/
此文件配置HDMI聲卡信息。由于HDMI聲卡只支持播放,此處只配置了播放的參數信息。
root {
platform {
template codec_controller {
match_attr = "";
serviceName = "";
codecDaiName = "";
}
...
controller_0x120c1031 :: codec_controller {
match_attr = "hdf_codec_driver_1";
serviceName = "codec_service_1";
codecDaiName = "hdmi_codec_dai";


hwInfo = [
/*
Playback/Captrue, formats, rates, rate_min, rate_max, channels_min, channels_max,
buffer_bytes_max, period_bytes_min, period_bytes_max, periods_min, periods_max
*/
1, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5
];
}
...
}
此文件配置了HDMI聲卡使用的codec信息。
match_attr配置項名稱和HDMI聲卡設備的codec服務私有配置名稱相匹配。serviceName HDMI聲卡codec驅動服務名稱需要和device_info配置文件中HDMI聲卡的codec驅動服務名稱相同。
codecDaiName HDMI聲卡使用的codec dai的設備名稱,此處名稱需要和audio_config配置文件中的codecDaiName名稱相同。
hwInfo配置聲卡的信息,包括聲卡播放和錄音支持的格式、采樣率范圍、通道范圍、緩存buffer最大值、每個周期的字節范圍、周期的范圍。第一個配置項Playback對應的值為1,Captrue對應的值為2。其他配置項沒有使用。
HDMI聲卡只支持播放,這里只配置了播放,有些參數沒有生效可以隨便配置。

6 應用樣例

audio_sample_render是用來測試錄音功能的工具,audio_sample_capture是用來測試播放功能的工具,audio_sample_event是用來檢測USB插拔事件上報的工具。這兩個工具可以通過編譯得到,編譯命令如下:
./build.sh --product-name yangfan -T audio_sample_render -T audio_sample_capture -T audio_sample_event
hdc shell
cd /data/
./audio_sample_renderYoungForYou.wav

7 功能驗證

使用hdc工具推送audio_sample_render和audio_sample_event和wav音頻文件到開發板data目錄下:
hdc file send E:audio_sample_render /data
hdc file send E:audio_sample_event /data
hdcfilesendE:xxx.wav/data
HDMI音頻類設備插拔檢測
進入shell端口進行一次HDMI設備插入、拔出流程。
hdc shell
#cd/data/#chmod+xaudio_sample_event#./audio_sample_event
插入打?。?/section>
===============================================================================
@@@@@ serviceName: audio_hdi_pnp_service
@@@@@ deviceClass: 32
@@@@@ status : 1
@@@@@ info : EVENT_TYPE=0x1;DEVICE_TYPE=0x400
===============================================================================
拔出打?。?/section>
===============================================================================
@@@@@ serviceName: audio_hdi_pnp_service
@@@@@ deviceClass: 32
@@@@@ status : 1
@@@@@ info : EVENT_TYPE=0x2;DEVICE_TYPE=0x400
===============================================================================
HDMI音頻類設備放音
進入shell端口進行一次完整的播放、停止、退出流程。
hdc shell
# cd /data/# chmod +x audio_sample_render## ./audio_sample_render YoungForYou.wav
==================== Loading Mode ===================
| 1. Passthrough Loading |
| 2. IPC Loading |
======================================================
Please enter your choice:
2
================= Select Audio Card ==================
1. primary
2. primary1
3. hdmi
4. usb
5. a2dp
======================================================
Please enter your choice:
3
================== Play Render Menu ==================
| 1. Render Start |
| 2. Render Stop |
| 3. Render Resume |
| 4. Render Pause |
| 5. Render SetVolume |
| 6. Render GetGain |
| 7. Render SetMute |
| 8. Render SetAttributes |
| 9. Render SelectScene |
| 10. Render getEXtParams |
| 11. Render getMmapPosition |
| 12.Exit |
======================================================
your choice is:
1
Music channels = 2
Music Rate = 44100 Hz
Music Bit = 16 bit
============= Play Render Mode ==========
| 1. Render non-mmap |
| 2. Render mmap |
========================================
Please enter your choice:
1
Start Successful,Music is playing
================== Play Render Menu ==================
| 1. Render Start |
| 2. Render Stop |
| 3. Render Resume |
| 4. Render Pause |
| 5. Render SetVolume |
| 6. Render GetGain |
| 7. Render SetMute |
| 8. Render SetAttributes |
| 9. Render SelectScene |
| 10. Render getEXtParams |
| 11. Render getMmapPosition |
| 12.Exit |
======================================================
your choice is:
2
Stop Successful
================== Play Render Menu ==================
| 1. Render Start |
| 2. Render Stop |
| 3. Render Resume |
| 4. Render Pause |
| 5. Render SetVolume |
| 6. Render GetGain |
| 7. Render SetMute |
| 8. Render SetAttributes |
| 9. Render SelectScene |
| 10. Render getEXtParams |
| 11. Render getMmapPosition |
| 12.Exit |
======================================================
your choice is:
12

8 總結

本文沒有介紹HDMI聲卡codec驅動的具體實現,代碼路徑drivers/hdf_core/framework/model/audio/hdmi。平臺適配支持HDMI聲卡可以不用關注驅動的具體實現。
支持HDMI聲卡是OpenHarmony系統使用中不可或缺的一部分,是OpenHarmony系統用于投影儀、電視顯示和生活場景的重要功能,本文介紹了OpenHarmony系統支持HDMI聲卡的適配步驟希望對您有所幫助。



原文標題:OpenHarmony支持HDMI接口聲卡適配說明

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2355

    瀏覽量

    42868
  • OpenHarmony
    +關注

    關注

    25

    文章

    3723

    瀏覽量

    16331

原文標題:OpenHarmony支持HDMI接口聲卡適配說明

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HDMI接口類型有哪些 HDMI接口與DisplayPort接口的比較

    HDMI(High-Definition Multimedia Interface,高清晰度多媒體接口)是一種用于傳輸高清視頻和音頻的接口標準。以下是一些常見的HDMI
    的頭像 發表于 11-27 14:22 ?489次閱讀

    HDMI接口支持哪些視頻分辨率

    HDMI(High-Definition Multimedia Interface)接口支持的視頻分辨率因版本不同而有所差異。以下是HDMI接口
    的頭像 發表于 11-27 14:14 ?1564次閱讀

    HDMI接口的作用和功能 HDMI接口與VGA接口的區別

    HDMI接口的主要作用和功能: 高清視頻傳輸 :HDMI接口能夠傳輸高分辨率的視頻信號,支持多種視頻格式,包括1080p、4K、8K等。
    的頭像 發表于 11-27 14:12 ?537次閱讀

    dp接口適配器常見問題及解決方案

    設備不支持DP接口,或者在連接時出現兼容性問題。 解決方案: 確認設備的DP接口版本是否匹配。不同版本的DP接口可能存在兼容性問題。 使用轉換器或
    的頭像 發表于 11-15 14:42 ?1148次閱讀

    dp接口適配器與HDMI的區別

    , Inc.(HDMI LA)負責制定標準。HDMI接口最初是為了取代傳統的模擬視頻接口而設計的,它能夠傳輸高清視頻和音頻信號,支持多種分辨
    的頭像 發表于 11-15 14:38 ?282次閱讀

    dp接口適配器如何連接顯示器

    在現代顯示技術中,DP接口因其高速數據傳輸能力和對高分辨率視頻的支持而越來越受歡迎。然而,并非所有的顯示器和圖形輸出設備都配備了DP接口。 DP接口
    的頭像 發表于 11-15 14:34 ?439次閱讀

    VGA轉HDMI適配器使用指南

    Multimedia Interface)接口的普及,越來越多的設備開始支持HDMI。 什么是VGA轉HDMI適配器 VGA轉
    的頭像 發表于 11-08 10:01 ?1155次閱讀

    VGA接口HDMI接口的區別

    器和圖形適配器而設計的。VGA接口使用15針腳的D-sub連接器,支持模擬信號傳輸。 HDMI接口H
    的頭像 發表于 11-08 09:59 ?1506次閱讀

    dp接口hdmi接口的區別

    在現代顯示技術中,DP(DisplayPort)和HDMI(High-Definition Multimedia Interface)接口是連接顯示器和視頻源的標準接口。它們都支持高分
    的頭像 發表于 10-30 13:37 ?718次閱讀

    主板聲卡HDMI屏蔽了怎么辦

    主板聲卡HDMI屏蔽了,通常是指在連接HDMI音頻輸出設備(如顯示器、電視等)時,系統自動將音頻輸出切換到HDMI設備,導致主板上的集成聲卡
    的頭像 發表于 08-20 15:15 ?1953次閱讀

    USB聲卡支持SPDIF格式嗎

    高質量的音頻信號。那么,USB聲卡是否支持SPDIF格式呢? USB聲卡的基本概念 USB聲卡是一種通過USB接口傳輸音頻信號的設備,它具有
    的頭像 發表于 08-20 15:07 ?613次閱讀

    HDMI光纖線纜支持對接頭嗎

    HDMI光纖線纜支持對接頭,但具體支持的對接頭類型和規格可能會因線纜型號、品牌和接口版本的不同而有所差異。 HDMI線是一種高清晰多媒體
    的頭像 發表于 06-24 10:27 ?648次閱讀

    HDMI接口和DVI接口有什么區別

    接口有單鏈路(18針)和雙鏈路(24針)兩種模式。 傳輸速率: HDMI接口的傳輸速率隨版本升級而提高。HDMI 1.3支持5Gbps,
    的頭像 發表于 06-17 10:28 ?3406次閱讀

    hdmi是什么接口連接顯示器

    HDMI接口,全稱“高清多媒體接口”,是一種全數字化視頻以及聲音發送接口,能夠發送未壓縮的音頻和視頻信號。HDMI
    的頭像 發表于 04-19 10:19 ?1319次閱讀

    如何判斷HDMI接口版本是1.4還是2.0呢?

    1.4和2.0。判斷HDMI接口版本主要通過以下幾種方法: 1. 查看產品說明書或標簽:在購買的電視、電腦顯示器、音視頻設備等產品上,通常會標注接口的版本信息。產品
    的頭像 發表于 02-02 17:26 ?2.7w次閱讀
    主站蜘蛛池模板: 欧美黄色一级视频| 九色综合久久综合欧美97| 狂捣猛撞侍卫攻双性王爷受| 亚洲一区区| 久久久久青草| 毛片黄色| 国产一级aaa全黄毛片| 国产理论| 永久免费影视在线观看| 午夜精品久久久久久久久| 天堂资源最新版在线www| 末满18以下勿进色禁网站| 国产jlzzjlzz视频免费| 好爽好大www视频在线播放| 香蕉视频久久久| 中文字幕在线播放第一页| 一个色在线视频| 色网站视频| 六月婷婷久久| www.毛片.com| 人人插人人干| 欧美性白人极品1819hd| 老师我好爽再深一点好大| 亚洲成人777| 欧美精品videosex极品| 国产1区2区三区不卡| 激情五月综合网| ass嫩美女胴体| 免费网站黄色| 亚洲综合激情另类专区 | 黄色在线视频免费看| 在线天堂在线| 高清一级毛片一本到免费观看| 一区二区三区高清在线| 亚洲色图视频在线| 免费黄色一级| 午夜影院免费观看视频| 1000部又爽又黄的做黄禁片| 国产成人精品三级在线| 日本美女黄视频| 99综合久久|