0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)案例:【相機(jī)開發(fā)】

jf_46214456 ? 來源:HarmonyOS ? 作者:HarmonyOS ? 2024-04-23 21:20 ? 次閱讀

基本概念

相機(jī)是OpenHarmony多媒體進(jìn)程提供的服務(wù)之一,提供了相機(jī)的錄像、預(yù)覽、拍照功能,支持多用戶并發(fā)取流。

在進(jìn)行應(yīng)用的開發(fā)前,開發(fā)者應(yīng)了解以下基本概念:

  • 視頻
    視頻流指的是將一系列圖片數(shù)據(jù)按照固定時(shí)間間隔排列形成的數(shù)據(jù)流,每一張圖片數(shù)據(jù)成為一幀,這樣的一幀稱為視頻幀。
  • 幀速率(FPS,F(xiàn)rames Per Second)
    視頻播放每秒鐘刷新圖片的速度,或是視頻每秒的幀數(shù),幀速率越高,視頻的觀感越流暢。
  • 分辨率
    每一幀的圖片信息都是由像素點(diǎn)組成的,分辨率描述了一張圖片中像素點(diǎn)的個(gè)數(shù)。例如1920*1080(1080P),是指圖片寬1920像素,高1080像素。

運(yùn)作機(jī)制

  • 多媒體服務(wù)進(jìn)程
    多媒體服務(wù)作為系統(tǒng)服務(wù),在系統(tǒng)啟動時(shí)由Init進(jìn)程拉起,并初始化和分配媒體硬件資源(內(nèi)存/顯示硬件/圖像傳感器/編解碼器等)。初始化過程解析配置文件,確定了多媒體各個(gè)服務(wù)的能力和資源上限,通常由OEM廠商通過配置文件進(jìn)行配置。相機(jī)服務(wù)在多媒體進(jìn)程初始化時(shí)有以下配置項(xiàng):

    • 內(nèi)存池:所有媒體服務(wù)依賴于內(nèi)存池中的內(nèi)存輪轉(zhuǎn)運(yùn)行
    • 圖像傳感器:包括了傳感器類型、分辨率、ISP等
    • 圖像處理器:分辨率、碼率、圖像翻轉(zhuǎn)等
    • 圖像編碼器:編碼格式、碼率、分辨率等
  • 關(guān)鍵類的解釋
    應(yīng)用通過持有下面4個(gè)類,配置和使用Camera的功能,包括了Camera類和它的三個(gè)異步回調(diào)類,三類回調(diào)分別對應(yīng)了不同類型的異步處理場景,詳見下表。
    表1 關(guān)鍵類的解釋

    對象用途舉例
    Camera對相機(jī)進(jìn)行靜態(tài)配置(通過配置類),觸發(fā)相機(jī)基本功能拍照/錄像/預(yù)覽
    CameraDeviceCallback處理相機(jī)硬件狀態(tài)變化可用/不可用
    CameraStateCallback處理camera自身狀態(tài)變化創(chuàng)建/釋放
    FrameStateCallback處理幀狀態(tài)的變化拍照開始和結(jié)束/幀率發(fā)生變化
  • 流的傳遞
    Surface是多媒體傳遞音視頻的基本數(shù)據(jù)結(jié)構(gòu),Camera一般作為Surface中數(shù)據(jù)的生產(chǎn)者,在不同的場景下有特定的消費(fèi)者。
    相機(jī)的預(yù)覽和錄像輸出均為視頻流,拍照輸出為圖像幀,二者均通過Surface類進(jìn)行傳遞。Surface類可以屏蔽進(jìn)程內(nèi)/跨進(jìn)程的場景,進(jìn)行多媒體信息流的傳遞。
    以錄像為例,用戶首先創(chuàng)建Recorder實(shí)例,并從Recorder中獲取對應(yīng)Surface,再將此Surface傳遞給Camera實(shí)例,此時(shí)Camera將作為生產(chǎn)者向Surface注入視頻流,而Recorder作為消費(fèi)者從Surface中取出視頻流進(jìn)行保存,用戶的行為類似橋接,把二者通過Surface連接起來。
    類似的,用戶也可以自行創(chuàng)建Surface傳遞給Camera實(shí)例,并實(shí)現(xiàn)消費(fèi)者邏輯(例如通過網(wǎng)絡(luò)傳輸視頻流,或是將拍照的幀數(shù)據(jù)保存成圖片文件)。
    圖形圖像模塊也通過Surface從Camera獲取流資源

鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

搜狗高速瀏覽器截圖20240326151547.png

小型系統(tǒng)圖形圖像框架介紹

概述

小型系統(tǒng)圖形圖像子系統(tǒng)是一套輕量級圖形框架,框架包括輕量級 UI 控件、動畫、事件、2D 圖形庫、字體布局引擎、多后端渲染和窗口管理等模塊,主要用于運(yùn)動手表、智能家居等小型帶屏設(shè)備的圖形 UI 顯示。

OpenHarmony 中各 UI 之間的關(guān)系

當(dāng)前對于 OpenHarmony 應(yīng)用界面開發(fā),你可能已經(jīng)了解到幾個(gè)不同的概念,比如 ArkUI 聲明式開發(fā)范式、ArkUI 類 Web 開發(fā)范式等,那他們和當(dāng)前小型系統(tǒng)圖形圖像框架之間是什么關(guān)系呢?

當(dāng)前 [ace_engine]實(shí)現(xiàn)了標(biāo)準(zhǔn)系統(tǒng)的 ArkUI 聲明式開發(fā)范式和 ArkUI 類 Web 開發(fā)范式兩套開發(fā)框架;根據(jù)小型系統(tǒng)的特點(diǎn) [ace_engine_lite]實(shí)現(xiàn)了輕量級的 ArkUI 類 Web 開發(fā)范式 lite 版本,其能力是 ArkUI 類 Web 開發(fā)范式的子集。

按照系統(tǒng)類型分類如下:

  • 標(biāo)準(zhǔn)系統(tǒng):
    • ArkUI 聲明式開發(fā)范式 (推薦)
    • ArkUI 類 Web 開發(fā)范式
  • 小型系統(tǒng):
    • ArkUI 類 Web 開發(fā)范式 Lite
    • C++ (系統(tǒng)應(yīng)用)

小型系統(tǒng)圖形圖像框架中的 [ui_lite] 和 [ace_engine_lite]、 [ace_engine]的代碼實(shí)現(xiàn)關(guān)系如下圖:

UI關(guān)系圖

如何確定應(yīng)用開發(fā)所需的 API 套件?對于標(biāo)準(zhǔn)系統(tǒng),優(yōu)先選擇 ArkUI 聲明式開發(fā)范式;對于小型系統(tǒng),請優(yōu)先考慮使用 ArkUI 類 Web 開發(fā)范式 lite。而在某些配置較低的設(shè)備上進(jìn)行系統(tǒng)應(yīng)用開發(fā)時(shí),則可以考慮選擇 C++ API,因?yàn)橄啾阮?Web 范式,它具有更高的性能和更好的靈活性。

UI 控件

實(shí)現(xiàn)各種控件,如按鈕、文本、進(jìn)度條等各種基本控件。

提供列表、Swiper、圖片序列幀等復(fù)雜控件。

布局

實(shí)現(xiàn)網(wǎng)格布局、靈活布局(如居中、左對齊、右對齊)。

布局為一次性布局。布局函數(shù)每運(yùn)行一次,會計(jì)算一次控件的位置,但是控件位置由其他方式改變時(shí)(如拖動),其他相關(guān)聯(lián)的控件位置不會自動發(fā)生變化,需要重新調(diào)用一次布局函數(shù)。

動畫

框架支持自定義動畫,所有動畫由 AnimatorManager 管理,根據(jù)屏幕刷新事件,由 AnimatorManager 周期性調(diào)用回調(diào)函數(shù)處理修改屬性變化,然后觸發(fā)刷新重新繪制組件,達(dá)到組件動畫效果。

提供動畫的開始/停止、暫停/恢復(fù)、創(chuàng)建/銷毀等各種操作 ,用于實(shí)現(xiàn)動畫效果。

事件

Input 事件包括觸摸屏觸摸輸入事件和物理按鍵輸入事件,引擎每運(yùn)行一次,InputManager 是管理所有輸入設(shè)備的模塊,GUI 引擎每運(yùn)行一次,InputManager 會讀取一次所有注冊的硬件設(shè)備的輸入,轉(zhuǎn)化為各種事件供UI控件使用。

繪制

2D 圖形繪制: 實(shí)現(xiàn)線、矩形、三角形、弧線的繪制操作。

圖像繪制:實(shí)現(xiàn)各種類型圖片的繪制能力,如 RGB565、RGB888、ARGB8888、PNG、JPG 格式。

字體繪制:支持矢量字體的實(shí)時(shí)繪制、布局排版。

實(shí)現(xiàn)原理

小型系統(tǒng)圖形框架中,任務(wù)隊(duì)列由屏幕刷新同步信號驅(qū)動。每個(gè)任務(wù)都是一個(gè) task,并存放在任務(wù)隊(duì)列中。周期性的屏幕刷新信號觸發(fā)周期性回調(diào),從而循環(huán)驅(qū)動任務(wù)隊(duì)列中的 task 執(zhí)行。輸入事件、動畫和渲染等操作均作為單獨(dú)的 task 運(yùn)行。

事件交互

當(dāng)前圖形框架支持觸摸事件(PointerInputDevice)、按鍵事件(KeyInputDevice)、旋轉(zhuǎn)表冠事件(RotateInputDevice)。

輸入事件相關(guān)類圖如上,每類輸入事件根據(jù)自己特點(diǎn),重寫 InputDevice 基類的 Read 函數(shù),讀取對應(yīng)的輸入數(shù)據(jù),然后根據(jù)輸入數(shù)據(jù)生成對應(yīng)的事件分發(fā)給 UI 控件,如 PointerInputDevice 讀取觸摸的坐標(biāo)點(diǎn),根據(jù)坐標(biāo)點(diǎn),從組件樹查找當(dāng)前坐標(biāo)對應(yīng)的控件,生成對應(yīng)的點(diǎn)擊、長按、拖拽事件,分發(fā)給對應(yīng)控件。

動效框架

每一個(gè)自定義動畫都需要繼承自 Animator 類,實(shí)現(xiàn) AnimatorCallback 的 Callback 接口。所有的 Animator 都由 AnimatorManager 統(tǒng)一管理。 Callback 接口入?yún)楫?dāng)前動畫的 View,可以通過修改 View 對應(yīng)的屬性來產(chǎn)生動畫效果,如坐標(biāo)位置、顏色變換、縮放效果等。

渲染框架

  • 每一個(gè)窗口 Window 持有一個(gè) RootView
  • RootView 為當(dāng)前窗口的根節(jié)點(diǎn),當(dāng)前窗口所有控件都必須掛載在 RootView 下才能顯示
  • UIView 為所有 View 的基類,每個(gè) View 實(shí)現(xiàn)自己的 OnDraw 繪制函數(shù)
  • 每個(gè) View 顯示發(fā)生變化時(shí),調(diào)用 Invalidate 函數(shù),將當(dāng)前區(qū)域標(biāo)記為臟區(qū)域
  • RootView 統(tǒng)一管理當(dāng)前窗口所有的臟區(qū)域信息
  • 每次刷新信號觸發(fā),會遍歷繪制所有的 Window,每個(gè) Window 從 RootView 開始先進(jìn)行 Measure 布局,然后調(diào)用 Render 函數(shù)繪制,遍歷繪制所有臟區(qū)域內(nèi)的 View。
  • 相機(jī)運(yùn)行流程
    1. Camera創(chuàng)建流程
      本進(jìn)程通過CameraManager創(chuàng)建Camera實(shí)例,并從服務(wù)端綁定camera設(shè)備,創(chuàng)建成功后異步通知developer。類之間的時(shí)序圖如下:
      圖1 Camera創(chuàng)建時(shí)序圖
      zh-cn_image_0000001200114819
    2. Camera錄像/預(yù)覽流程
      開發(fā)者首先通過CameraKit創(chuàng)建Camera,然后FrameConfig類對錄像或者預(yù)覽幀屬性進(jìn)行配置。錄像/預(yù)覽時(shí)序如下:
      圖2 Camera錄像/預(yù)覽時(shí)序圖
      zh-cn_image_0000001200115193

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2358

    瀏覽量

    42876
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1977

    瀏覽量

    30237
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3723

    瀏覽量

    16343
收藏 人收藏

    評論

    相關(guān)推薦

    TL3588-NPU開發(fā)案

    TL3588-NPU開發(fā)案
    的頭像 發(fā)表于 01-24 15:22 ?612次閱讀
    TL3588-NPU<b class='flag-5'>開發(fā)案</b>例

    TL3588-視頻開發(fā)案

    TL3588-視頻開發(fā)案
    的頭像 發(fā)表于 01-24 16:29 ?682次閱讀
    TL3588-視頻<b class='flag-5'>開發(fā)案</b>例

    TLT507-Linux-RT應(yīng)用開發(fā)案

    TLT507-Linux-RT應(yīng)用開發(fā)案
    的頭像 發(fā)表于 01-26 09:46 ?708次閱讀
    TLT507-Linux-RT應(yīng)用<b class='flag-5'>開發(fā)案</b>例

    TLT507-IgH EtherCAT主站開發(fā)案

    TLT507-IgH EtherCAT主站開發(fā)案
    的頭像 發(fā)表于 01-26 10:19 ?890次閱讀
    TLT507-IgH EtherCAT主站<b class='flag-5'>開發(fā)案</b>例

    TLT507-視頻開發(fā)案

    TLT507-視頻開發(fā)案
    的頭像 發(fā)表于 01-26 10:50 ?992次閱讀
    TLT507-視頻<b class='flag-5'>開發(fā)案</b>例

    3568F-視頻開發(fā)案

    3568F-視頻開發(fā)案
    的頭像 發(fā)表于 04-12 13:51 ?905次閱讀
    3568F-視頻<b class='flag-5'>開發(fā)案</b>例

    HarmonyOS IoT 硬件開發(fā)案例分享

    ``許思維老師HiSpark Wi-Fi IoT 開發(fā)案例分享:案例一:AHT20溫濕度傳感器開發(fā)、調(diào)試;案例二:oled屏驅(qū)動庫移植,調(diào)試;案例三:用OLED屏播放視頻,Wi-Fi 和 TCP/IP 綜合應(yīng)用。 ``
    發(fā)表于 10-27 17:30

    【潤和直播課預(yù)告@華為開發(fā)者學(xué)院】HarmonyOS設(shè)備開發(fā)基礎(chǔ)課程|HiSpark WiFi-IoT 智能小車套件開發(fā)案

    `【潤和直播課預(yù)告@華為開發(fā)者學(xué)院】HarmonyOS設(shè)備開發(fā)基礎(chǔ)課程|HiSparkWiFi-IoT 智能小車套件開發(fā)案例,3月18日(周四) 19:00-21:00,讓你的
    發(fā)表于 03-16 15:01

    Linux應(yīng)用開發(fā)手冊之Python開發(fā)案

    本文檔涉及的開發(fā)案例位于產(chǎn)品資料“4-軟件資料\Demo\”路徑下的base-demos和python-demos目錄。base-demos目錄存放Linux常用開發(fā)案例,案例bin目錄存放
    發(fā)表于 05-11 10:21

    51單片機(jī)應(yīng)用開發(fā)案例精選-源代碼

    本內(nèi)容提供了51單片機(jī)應(yīng)用開發(fā)案例精選-源代碼及開發(fā)圖片
    發(fā)表于 08-10 09:40 ?537次下載
    51單片機(jī)應(yīng)用<b class='flag-5'>開發(fā)案</b>例精選-源代碼

    許思維老師HarmonyOS IoT硬件開發(fā)案例分享

    許思維老師HiSpark Wi-Fi IoT 開發(fā)案例分享:案例一:AHT20溫濕度傳感器開發(fā)、調(diào)試;案例二:oled屏驅(qū)動庫移植,調(diào)試;案例三:用OLED屏播放視頻,Wi-Fi 和 TCP/IP 綜合應(yīng)用。
    發(fā)表于 10-29 10:39 ?39次下載
    許思維老師<b class='flag-5'>HarmonyOS</b> IoT硬件<b class='flag-5'>開發(fā)案</b>例分享

    數(shù)碼播放器的開發(fā)案

    數(shù)碼播放器的開發(fā)案例說明。
    發(fā)表于 05-19 11:07 ?6次下載

    華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案

    2021華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?1925次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學(xué)生公開課-OpenHarmony Codelabs<b class='flag-5'>開發(fā)案</b>例

    RK3568-視頻開發(fā)案

    RK3568-視頻開發(fā)案
    的頭像 發(fā)表于 01-18 15:51 ?883次閱讀
    RK3568-視頻<b class='flag-5'>開發(fā)案</b>例

    RK3568---NPU開發(fā)案

    RK3568---NPU開發(fā)案
    的頭像 發(fā)表于 01-19 13:50 ?952次閱讀
    RK3568---NPU<b class='flag-5'>開發(fā)案</b>例