要探究鴻蒙系統(tǒng)的媒體子系統(tǒng),從何說起呢?我是從源碼目錄下 applications 下的應(yīng)用開始的,不過既然在這里記錄下來,就從更清晰的角度來切入。
首先,看權(quán)威介紹:
https://gitee.com/openharmony/docs/blob/master/readme/媒體子系統(tǒng)README.md
由該readme可知,子系統(tǒng)雖然底層龐大且盤根錯節(jié),但是,面向應(yīng)用層,其宗旨(原文)是:
旨在為多媒體應(yīng)用開發(fā)者開發(fā)者提供統(tǒng)一的開發(fā)接口,使得開發(fā)者可以專注于應(yīng)用業(yè)務(wù)的開發(fā),輕松使用多媒體的資源。
也就是說,封裝之后的耦合程度大大降低了。實際上,應(yīng)用層僅需實現(xiàn)少量回調(diào)函數(shù)并按流程操作,即可輕松實現(xiàn)諸如拍照、錄像、預(yù)覽等功能。
我們首先來一下瀏覽框架及流程圖,有助于接下來的底層分析。
回看源碼。源碼如下applications/sample/camera/media/camera_sample.cpp
中實現(xiàn)的拍照、錄像功能,以此為起點,探究一下系統(tǒng)的多媒體框架,并介紹關(guān)鍵組件。
根據(jù)對代碼的閱讀,我先將類圖大體上整理出來(水平有限,且時間倉促,錯誤之處望各位不吝賜教):
在 camera_sample.cpp 的 main() 中,首先調(diào)用 CameraKit::GetInstance() 獲取一個 CameraKit 實例 camKit;得到實例后繼而調(diào)用 camKit-》GetCameraIds() 獲取 camera ID 列表,遍歷列表,獲取每個ID的對應(yīng)的camera的ability,找到其中支持指定目標(biāo)大小的camera ID。
通過CameraKit 實例調(diào)用camKit-》CreateCamera(camId, CamStateMng, eventHdlr) 來構(gòu)造 camera,以下是涉及的相關(guān)類及其關(guān)系。
由關(guān)系圖可知,CameraKit 中聚合了 CameraManager,實際上是由 CameraManagerImpl 繼承并拓展了該類,CameraManager 內(nèi)部持有CameraManagerImpl類的實例,即cameraManagerImpl,后續(xù)的相關(guān)操作由該成員來完成。
緊接著來看CameraManagerImpl類,其成員中有:
CameraService *cameraService_;
該成員是一個關(guān)鍵,它內(nèi)部聚合了:
CameraDevice *device_ = nullptr;
CameraAbility *ability_ = nullptr;
CameraServiceCallback *cameraServiceCb_ = nullptr;
其中:CameraAbility 類型的 ability_ 用來描述CameraService的能力;CameraServiceCallback 類型的 cameraServiceCb_ 用來在構(gòu)造CameraManagerImpl實例時候?qū)ameraService做一些初始化工作及camera狀態(tài)改變的處理;CameraDevice 類型的 device_ 成員是類 CameraService的核心;
下面詳細(xì)分析CameraDevice類;
CameraDevice類涉及到了HAL層及硬件編解碼器的操作,由于底層被封裝為庫文件的形式,給理解帶來的一定的障礙,不過可以暫時先忽略細(xì)節(jié),把焦點放到框架上,接下來對其涉及的各個模塊做深入分析。
責(zé)任編輯:lq
-
解碼器
+關(guān)注
關(guān)注
9文章
1174瀏覽量
41955 -
封裝
+關(guān)注
關(guān)注
128文章
8662瀏覽量
145430 -
鴻蒙系統(tǒng)
+關(guān)注
關(guān)注
183文章
2642瀏覽量
68066 -
OpenHarmony
+關(guān)注
關(guān)注
29文章
3851瀏覽量
18578
原文標(biāo)題:OpenHarmopny的媒體子系統(tǒng)_1
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
迅為RK3568開發(fā)板新增topeet子系統(tǒng)-在產(chǎn)品中新增子系統(tǒng)
迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實驗

飛凌嵌入式ElfBoard ELF 1板卡-input子系統(tǒng)之input子系統(tǒng)簡介
飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之GPIO子系統(tǒng)
飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之Pinctrl子系統(tǒng)
云天勵飛DeepEdge10芯片與國產(chǎn)鴻蒙操作系統(tǒng)完成適配
詳解deepin 25 Preview的Distrobox子系統(tǒng)


開源鴻蒙系統(tǒng)外設(shè)指紋儀模塊功能演示#OpenHarmony

開源鴻蒙系統(tǒng)外設(shè)身份證模塊讀取信息演示 #OpenHarmony
名單公布!【書籍評測活動NO.53】鴻蒙操作系統(tǒng)設(shè)計原理與架構(gòu)
鴻蒙系統(tǒng)專用版微信內(nèi)測即將啟動
華為原生鴻蒙操作系統(tǒng)正式發(fā)布
Jacinto 7顯示子系統(tǒng)概述應(yīng)用說明

評論