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