色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

OpenHarmony Camera源碼工作的整個流程

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:郭岳峰 ? 2022-09-02 10:05 ? 次閱讀

郭岳峰

深圳開鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司

OS內(nèi)核開發(fā)工程師

一、簡介

當(dāng)前,開源在科技進(jìn)步和產(chǎn)業(yè)發(fā)展中發(fā)揮著越來越重要的作用,OpenAtom OpenHarmony(簡稱“OpenHarmony”)賦予了開發(fā)者孕育創(chuàng)新的種子,也為數(shù)字化產(chǎn)業(yè)發(fā)展開辟了一片土壤。深開鴻是開源的堅定踐行者,基于OpenHarmony聚焦智能物聯(lián)網(wǎng)操作系統(tǒng)(KaihongOS)技術(shù)研發(fā)與持續(xù)創(chuàng)新。

OpenHarmony Camera是多媒體子系統(tǒng)中的一個重要模塊,Camera提供了OpenHarmony相機(jī)的預(yù)覽、拍照和錄像等功能。作為深開鴻的一名OS系統(tǒng)開發(fā)工程師,我長期致力于OpenHarmony框架層的研發(fā)工作,在OpenHarmony相機(jī)模塊的拍照、預(yù)覽和錄像方面積累了一些經(jīng)驗,我將圍繞著這三個核心功能對OpenHarmony Camera源碼進(jìn)行詳細(xì)的分析。

二、OpenHarmony相機(jī)子系統(tǒng)

(1)系統(tǒng)簡介

相機(jī)組件支持相機(jī)業(yè)務(wù)的開發(fā),開發(fā)者可以通過已開放的接口實(shí)現(xiàn)相機(jī)硬件的訪問、操作和新功能開發(fā),最常見的操作如:預(yù)覽、拍照和錄像等。

366e82d2-29f7-11ed-ba43-dac502259ad0.png

架構(gòu)圖

相機(jī)框架中主要包含會話管理、設(shè)備輸入和數(shù)據(jù)輸出,設(shè)備的輸入和數(shù)據(jù)的輸出配置都是在采集會話中完成,會話管理模塊管理相機(jī)設(shè)備輸入和數(shù)據(jù)輸出。應(yīng)用層在調(diào)用相機(jī)功能時,首先需要創(chuàng)建采集會話,在配置會話的過程中會將創(chuàng)建的設(shè)備輸入和數(shù)據(jù)輸出添加到采集會話中。

相機(jī)框架中幾個重要的概念

會話管理:對相機(jī)采集的生命周期、參數(shù)配置、輸入和輸出的管理。

設(shè)備輸入:主要的輸入設(shè)備是相機(jī),對相機(jī)的輸入?yún)?shù)進(jìn)行設(shè)置,比如設(shè)置閃光燈模式等。

數(shù)據(jù)輸出:相機(jī)的輸出有拍照輸出、預(yù)覽輸出和錄像輸出,分別對應(yīng)三個不同的類,所以上層需要根據(jù)不同的場景創(chuàng)建出不同的數(shù)據(jù)輸出。

36a5650e-29f7-11ed-ba43-dac502259ad0.png

相機(jī)底層功能圖

相機(jī)驅(qū)動框架模型對上實(shí)現(xiàn)相機(jī)HDI接口,對下實(shí)現(xiàn)相機(jī)Pipeline模型,管理相機(jī)各個硬件設(shè)備。底層硬件提供了相機(jī)設(shè)備功能,比如相機(jī)的設(shè)備管理,包括相機(jī)設(shè)備枚舉、相機(jī)設(shè)備能力查詢、流的創(chuàng)建管理以及圖像的捕獲。

(2)功能模塊

會話管理模塊

會話管理模塊的主要功能是配置會話的輸入(設(shè)備輸入)和輸出(數(shù)據(jù)的輸出),以及控制會話的開始和結(jié)束,主要接口有:

3cfbc25e-29f7-11ed-ba43-dac502259ad0.png

設(shè)備輸入模塊

相機(jī)輸入主要是給會話設(shè)置設(shè)備的輸入,設(shè)備輸入模塊可以設(shè)置和獲取輸入設(shè)備的參數(shù),比如閃光燈模式、縮放比例、對焦模式等,主要接口有:

3d551ce6-29f7-11ed-ba43-dac502259ad0.png

數(shù)據(jù)輸出模塊

數(shù)據(jù)輸出模塊根據(jù)不同的場景分為拍照輸出、預(yù)覽輸出和錄像輸出。其中拍照的輸出是通過PhotoOutput的Capture接口來提供拍照功能,預(yù)覽和錄像則是通過StreamRepeat提供的接口實(shí)現(xiàn)。主要接口有:

3d9d4cf0-29f7-11ed-ba43-dac502259ad0.png

(3)功能特性或應(yīng)用場景

相關(guān)功能接口:相機(jī)拍照、相機(jī)預(yù)覽、相機(jī)錄像。

相機(jī)的主要應(yīng)用場景是拍照、預(yù)覽和錄像,以下針對這三個場景進(jìn)行流程的分析。

3de10fe4-29f7-11ed-ba43-dac502259ad0.png

camera\_standardinterfacesinner_api ative est目錄下應(yīng)用文件進(jìn)行拍照、預(yù)覽和錄像功能的使用,進(jìn)行源碼分析。

拍照源碼分析

拍照功能根據(jù)camera\_capture.cpp文件中的main方法進(jìn)行分析,以下列舉了main方法中的主要調(diào)用步驟,并且在注釋中介紹核心代碼的功能。

3e0c10b8-29f7-11ed-ba43-dac502259ad0.png

在拍照過程中首先獲取相機(jī)管理器實(shí)例并獲得相機(jī)對象列表,然后創(chuàng)建并配置采集會話(其中包括配置相機(jī)輸入、創(chuàng)建消費(fèi)者Surface以及監(jiān)聽事件、配置拍照輸出),最后拍攝照片,釋放資源。

以下是拍照流程的時序圖,流程只分析到CameraService,后續(xù)的操作是通過Camera的Service和HDI接口進(jìn)行調(diào)用,最終調(diào)用到Camera的底層HDF實(shí)現(xiàn)。以下對幾個核心代碼進(jìn)行具體分析。

3f561d06-29f7-11ed-ba43-dac502259ad0.png

① 創(chuàng)建采集會話App側(cè)先調(diào)用CameraManager的CreateCaptureSession接口。

3fef8e8c-29f7-11ed-ba43-dac502259ad0.png

CameraManager中有一個serviceProxy\_變量,這個變量在CameraManager初始化的時候賦值。

405e17da-29f7-11ed-ba43-dac502259ad0.png

CameraManager中通過serviceProxy\_調(diào)用CreateCaptureSession,實(shí)際上是調(diào)用到HcameraService的CreateCaptureSession接口,新建了HCaptureSession對象,并通過CreateCaptureSession參數(shù)進(jìn)行返回。

4164baee-29f7-11ed-ba43-dac502259ad0.png

② 創(chuàng)建消費(fèi)者Surface并注冊監(jiān)聽器以監(jiān)聽緩沖區(qū)更新

調(diào)用Surface的CreateSurfaceAsConsumer接口。

41ba1c5a-29f7-11ed-ba43-dac502259ad0.png

創(chuàng)建ConsumerSurface對象,然后對該對象進(jìn)行初始化操作,Init主要創(chuàng)建BufferQueue并初始化,使用BufferQueue作為參數(shù)創(chuàng)建出BufferQueue的Producer和Consumer,作為數(shù)據(jù)生產(chǎn)者和消費(fèi)者。

42a90144-29f7-11ed-ba43-dac502259ad0.png

創(chuàng)建CaptureSurfaceListener對象。CaptureSurfaceListener繼承IbufferConsumerListener抽象類,實(shí)現(xiàn)了OnBufferAvailable接口,capture成功后,在這個接口中通過surface的AcquireBuffer方法來獲取幀數(shù)據(jù),進(jìn)行保存圖片的處理。

43236c72-29f7-11ed-ba43-dac502259ad0.png

接下來是注冊監(jiān)聽器,方法是調(diào)用ConsumerSurface的RegisterConsumerListener接口。

436d56ca-29f7-11ed-ba43-dac502259ad0.png

調(diào)用BufferQueueConsumer的RegisterConsumerListener接口,最終是調(diào)用到BufferQueue的RegisterConsumerListener接口。

43ac5898-29f7-11ed-ba43-dac502259ad0.png

43f5be02-29f7-11ed-ba43-dac502259ad0.png

③ 拍攝照片

調(diào)用PhotoOutput的Capture接口實(shí)現(xiàn)拍照功能。

449df5f4-29f7-11ed-ba43-dac502259ad0.png

通過streamCapture\_調(diào)用到了HstreamCapture的Capture接口。

44c51cb0-29f7-11ed-ba43-dac502259ad0.png

調(diào)用流程來到了StreamOperatorProxy的Capture接口,StreamOperatorProxy是HDI模塊的client端,HDI模塊的client通過IPC調(diào)用到HDI的server端進(jìn)行具體的操作,這個屬于底層調(diào)用模塊,暫時不繼續(xù)分析。

預(yù)覽源碼分析

預(yù)覽功能根據(jù)camera\_capture.cpp文件中的main方法進(jìn)行分析,以下列舉了main方法中的主要調(diào)用步驟,并且注釋中介紹核心代碼的功能。

45149146-29f7-11ed-ba43-dac502259ad0.png

在預(yù)覽過程中首先獲取相機(jī)管理器實(shí)例并獲得相機(jī)對象列表,然后創(chuàng)建并配置采集會話(其中包括配置相機(jī)輸入、創(chuàng)建消費(fèi)者Surface以及監(jiān)聽事件、配置預(yù)覽輸出),最后開始預(yù)覽、停止預(yù)覽、釋放資源。

以下是預(yù)覽流程的時序圖,流程只分析到CameraService,后續(xù)的操作是通過Camera的Service和HDI接口進(jìn)行調(diào)用,最終調(diào)用到Camera的底層HDF實(shí)現(xiàn)。由于預(yù)覽和拍照流程有部分一致,我們只分析差異部分的流程。

4646df2e-29f7-11ed-ba43-dac502259ad0.png

① 創(chuàng)建預(yù)覽輸出

首先調(diào)用CameraManager的CreateCustomPreviewOutput接口。

4671a722-29f7-11ed-ba43-dac502259ad0.png

調(diào)用HcameraService的CreateCustomPreviewOutput的接口,這個接口中會創(chuàng)建HStreamRepeat對象,并將對象賦值給streamRepeat的參數(shù),后續(xù)根據(jù)streamRepeat創(chuàng)建PreviewOutput對象返回,PreviewOutput作為預(yù)覽的輸出。

474e9ad8-29f7-11ed-ba43-dac502259ad0.png

②開始預(yù)覽

首先調(diào)用CaptureSession的Start接口。

477f0c40-29f7-11ed-ba43-dac502259ad0.png

接著調(diào)用HCaptureSession的Start接口。

47ce4210-29f7-11ed-ba43-dac502259ad0.png

在HCaptureSession的調(diào)用中,調(diào)用HStreamRepeat的Start接口,HStreamRepeat在上述的創(chuàng)建預(yù)覽輸出時創(chuàng)建的對象,最終調(diào)用到HStreamRepeat的StartPreview接口。

48143856-29f7-11ed-ba43-dac502259ad0.png

48a590da-29f7-11ed-ba43-dac502259ad0.png

在StartPreview方法中調(diào)用streamOperator\_的Capture接口,第三個參數(shù)傳入true,表示連續(xù)抓取數(shù)據(jù)。streamOperator\_的調(diào)用是在HDI中的操作,屬于底層操作,暫不進(jìn)行分析。

錄像源碼分析

錄像功能根據(jù)camera\_video.cpp文件中的main方法進(jìn)行分析,以下列舉了main方法中的主要調(diào)用步驟,并且注釋中介紹核心代碼的功能。

48e35050-29f7-11ed-ba43-dac502259ad0.png

在錄像過程中首先獲取相機(jī)管理器實(shí)例并獲得相機(jī)對象列表,然后創(chuàng)建并配置采集會話(其中包括配置相機(jī)輸入、創(chuàng)建視頻輸出),最后進(jìn)行視頻的錄制、暫停、恢復(fù)和停止。

以下是錄像流程的時序圖,流程只分析到了CameraService相關(guān),后續(xù)的操作是通過Camera的Service和HDI接口進(jìn)行調(diào)用,最終調(diào)用到Camera的底層HDF實(shí)現(xiàn)。錄像流程跟上述流程基本一致,針對差異流程做相關(guān)的源碼分析。

49ec71de-29f7-11ed-ba43-dac502259ad0.png

①創(chuàng)建錄像輸出

首先調(diào)用CameraManager的CreateVideoOutput接口,在CameraManager會調(diào)用serviceProxy\_變量的CreateVideoOutput.

4a5c2c36-29f7-11ed-ba43-dac502259ad0.png

serviceProxy\_最終會調(diào)用到HcameraService的CreateVideoOutput接口,在HcameraService中會創(chuàng)建HStreamRepeat對象,創(chuàng)建成功后會將該對象賦值給CreateVideoOutput的第二個參數(shù)streamRepeat,這個參數(shù)會在CameraManager中作為創(chuàng)建VideoOutput的參數(shù)。

4aab1a44-29f7-11ed-ba43-dac502259ad0.png

②開始錄像

首先調(diào)用VideoOutput的Start接口,接著會調(diào)用到streamRepeat\_的Start接口。

4ae89c84-29f7-11ed-ba43-dac502259ad0.png

最終由StartVideo接口來實(shí)現(xiàn)錄像的功能。

4b11ad5e-29f7-11ed-ba43-dac502259ad0.png

調(diào)用streamOperator的Capture接口來進(jìn)行錄像,其中第二個參數(shù)captureInfoVideo是video相關(guān)的信息參數(shù)。

4b383942-29f7-11ed-ba43-dac502259ad0.png

三、總結(jié)

本文首先對相機(jī)預(yù)覽、拍照和錄像功能的應(yīng)用層進(jìn)行了代碼分析,其次對框架層的流程進(jìn)行了梳理,最后再對框架源碼進(jìn)行分析。希望通過本文能幫助開發(fā)者初步掌握OpenHarmony Camera源碼工作的整個流程。

關(guān)于OpenHarmony多媒體子系統(tǒng)方面的內(nèi)容,我已經(jīng)發(fā)表過《如何通過OpenHarmony的音頻模塊實(shí)現(xiàn)錄音變速功能》《如何通過OpenHarmony系統(tǒng)中集成的ffmpeg庫和NAPI機(jī)制,實(shí)現(xiàn)更多的多媒體功能?》兩篇文章,感興趣的朋友可以點(diǎn)擊閱讀,希望大家通過學(xué)習(xí)能夠掌握更多OpenHarmony多媒體子系統(tǒng)的工作原理

審核編輯:湯梓紅

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

    關(guān)注

    8

    文章

    667

    瀏覽量

    30117
  • Camera
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    21322
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3812

    瀏覽量

    18046

原文標(biāo)題:OpenHarmony Camera源碼分析

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

收藏 0人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    2K0300 OpenHarmony源碼構(gòu)建指南

    2K0300 OpenHarmony源碼構(gòu)建參考如下 2K0300先鋒派OpenHarmony源碼構(gòu)建指南 2K0300 源碼編譯wiki
    發(fā)表于 02-05 09:36

    如何獲取OpenHarmonyOS源碼

    源碼獲取OpenHarmony介紹OpenHarmony是HarmonyOS的開源版,由華為捐贈給開放原子開源基金會(OpenAtom Foundation)開源。第一個開源版本支持在128KB
    發(fā)表于 09-10 18:03

    HarmonyOS學(xué)習(xí)之四:OpenHarmony源碼下載及構(gòu)成簡介

    /manifest.git -b master二、源碼目錄說明OpenHarmony的主要源碼的目錄及說明如下:applications:應(yīng)用程序樣例,包括wifi-iot,camera
    發(fā)表于 11-26 09:42

    android camera驅(qū)動流程是怎樣的?

    android camera驅(qū)動流程是怎樣的?
    發(fā)表于 03-03 08:04

    OpenHarmony下載

    OpenHarmony官方認(rèn)證后,貢獻(xiàn)代碼到OpenHarmony社區(qū)。修復(fù)OpenHarmony的問題。學(xué)習(xí)OpenHarmony源碼
    發(fā)表于 03-09 18:36

    AP側(cè)中網(wǎng)相關(guān)的PLMN業(yè)務(wù)源碼流程解讀

    搜網(wǎng)流程可以簡單概括為 PLMN 選擇、小區(qū)搜索、網(wǎng)絡(luò)注冊,而 PLMN 選擇主要在 cp 側(cè)完成,而 PLMN在 OpenHarmony 源碼中(即 AP 側(cè))主要涉及到的業(yè)務(wù)就是搜網(wǎng)模塊中
    發(fā)表于 03-24 15:48

    如何導(dǎo)入OpenHarmony源碼

      Import Project適用于打開DevEco Device Tool創(chuàng)建的工程項目和獲取的OpenHarmony源碼。如果是打開OpenHarmony源碼,在打開工程時,點(diǎn)擊
    發(fā)表于 04-12 11:16

    OpenHarmony開發(fā)——系統(tǒng)源碼編譯

    背景隨著OpenHarmony-v3.1的發(fā)布,越來越多的開發(fā)者將目光聚焦到OpenHarmony系統(tǒng)開發(fā)上。對于首次接觸OpenHarmony的開發(fā)者來說,如何進(jìn)行源碼編譯是一個大難
    發(fā)表于 08-30 10:08

    OpenHarmony Camera源碼分析

    OpenHarmony Camera源碼工作整個流程。關(guān)于
    發(fā)表于 09-06 11:21

    IP camera的開源系統(tǒng)

    Xilinx FPGA工程例子源碼:IP camera的開源系統(tǒng)
    發(fā)表于 06-07 14:13 ?13次下載

    openharmony刷機(jī)教程 源碼獲取概述

    。許多人搞不懂openharmony如何用,下面小編帶來openharmony刷機(jī)教程。 openharmony從代碼倉庫源碼獲取概述 首先注冊碼云gitee賬號以及碼云SSH公鑰,之
    的頭像 發(fā)表于 06-22 10:37 ?3061次閱讀

    openharmony升級 openharmony源碼獲取

    openharmony源碼獲取 適合剛接觸OpenHarmony不久、想進(jìn)行快速開發(fā)的用戶。能夠在在HPM網(wǎng)站獲取下載開源發(fā)行版,或者在開源發(fā)行版的基礎(chǔ)上定制。之后用hpm-cli把相關(guān)的組件還有工具下載安裝。 首先自己要安裝好
    的頭像 發(fā)表于 06-23 09:51 ?2133次閱讀

    openharmony源碼地址 openharmony編譯運(yùn)行

    一、Openharmony源碼地址以及獲取方式 開源代碼倉庫地址:https://openharmony.gitee.com 1:從鏡像站點(diǎn)下載歸檔后的發(fā)行版壓縮文件。 2:通過HPM包管理器獲取
    的頭像 發(fā)表于 06-23 10:49 ?2991次閱讀

    openharmony源碼解讀

    如何獲取OpenHarmony源碼并說明OpenHarmony源碼目錄結(jié)構(gòu)。OpenHarmony的代碼以組件的形式開放,開發(fā)者可以通過如
    的頭像 發(fā)表于 06-24 09:29 ?4005次閱讀

    鴻蒙OpenHarmony【創(chuàng)建工程并獲取源碼

    在通過DevEco Device Tool創(chuàng)建OpenHarmony工程時,可自動下載相應(yīng)版本的OpenHarmony源碼
    的頭像 發(fā)表于 04-19 21:40 ?603次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【創(chuàng)建工程并獲取<b class='flag-5'>源碼</b>】
    主站蜘蛛池模板: 一区二区三区无码被窝影院 | 午夜在线播放免费人成无 | 欧美激情性AAAAA片欧美 | 99精品视频在线观看re | 久久精品亚洲视频 | 久久99精品国产99久久6男男 | 迅雷哥在线观看高清 | 国产精品无码人妻99999 | 尤物国产在线精品三区 | 亚洲中文无码AV在线观看 | 国产强奷糟蹋漂亮邻居在线观看 | 久久笫一福利免费导航 | 国产精品久久婷婷五月色 | 国产精品嫩草影视在线观看 | 国产色偷偷男人的天堂 | 国产黄A片在线观看永久免费麻豆 | 狠狠插狠狠干 | 4k岛国精品午夜高清在线观看 | 亚洲免费成人 | 欧美亚洲另类热图 | 芳草地在线观看免费视频 | JAVAPARSER丰满白老师 | 无颜之月5集全免费看无删除 | 性白俄罗斯高清xxxxx | 快播电影网站大全 | 国产精品A久久久久久久久 国产精品A久久777777 | 黄色免费在线网址 | 色婷婷五月综合久久中文字幕 | 在线 日韩 欧美 国产 社区 | 国产精品成人不卡在线观看 | yw193龙物免费官网在线 | 久久99re2在线视频精品 | metart中国撒尿人体欣赏 | 狠狠国产欧美在线视频 | 国内精品久久久久影院男同志 | 国产手机精品一区二区 | 好爽胸大好深好多水 | 超碰在线视频 | 床伴在线观看免费高清完整泰剧第四集 | 亚洲色大成网站WWW永久麻豆 | 国产色精品久久人妻无码看片 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品