女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

OpenHarmony Camera源碼工作的整個(gè)流程

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

郭岳峰

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

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

一、簡(jiǎn)介

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

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

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

(1)系統(tǒng)簡(jiǎn)介

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

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

架構(gòu)圖

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

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

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

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

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

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

相機(jī)底層功能圖

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

(2)功能模塊

會(huì)話管理模塊

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

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

設(shè)備輸入模塊

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

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

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

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

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

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

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

相機(jī)的主要應(yīng)用場(chǎng)景是拍照、預(yù)覽和錄像,以下針對(duì)這三個(gè)場(chǎng)景進(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

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

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

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

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

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

CameraManager中有一個(gè)serviceProxy\_變量,這個(gè)變量在CameraManager初始化的時(shí)候賦值。

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

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

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

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

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

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

創(chuàng)建ConsumerSurface對(duì)象,然后對(duì)該對(duì)象進(jìn)行初始化操作,Init主要?jiǎng)?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對(duì)象。CaptureSurfaceListener繼承IbufferConsumerListener抽象類,實(shí)現(xiàn)了OnBufferAvailable接口,capture成功后,在這個(gè)接口中通過(guò)surface的AcquireBuffer方法來(lái)獲取幀數(shù)據(jù),進(jìn)行保存圖片的處理。

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

接下來(lái)是注冊(cè)監(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

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

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

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

預(yù)覽源碼分析

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

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

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

以下是預(yù)覽流程的時(shí)序圖,流程只分析到CameraService,后續(xù)的操作是通過(guò)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的接口,這個(gè)接口中會(huì)創(chuàng)建HStreamRepeat對(duì)象,并將對(duì)象賦值給streamRepeat的參數(shù),后續(xù)根據(jù)streamRepeat創(chuàng)建PreviewOutput對(duì)象返回,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ù)覽輸出時(shí)創(chuàng)建的對(duì)象,最終調(diào)用到HStreamRepeat的StartPreview接口。

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

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

在StartPreview方法中調(diào)用streamOperator\_的Capture接口,第三個(gè)參數(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

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

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

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

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

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

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

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

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

②開始錄像

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

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

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

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

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

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

三、總結(jié)

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

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

審核編輯:湯梓紅

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

    關(guān)注

    8

    文章

    667

    瀏覽量

    30126
  • Camera
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    21337
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3816

    瀏覽量

    18090

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

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

收藏 人收藏

    評(píng)論

    相關(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的開源版,由華為捐贈(zèng)給開放原子開源基金會(huì)(OpenAtom Foundation)開源。第一個(gè)開源版本支持在128KB
    發(fā)表于 09-10 18:03

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

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

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

    android camera驅(qū)動(dòng)流程是怎樣的?
    發(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)流程可以簡(jiǎn)單概括為 PLMN 選擇、小區(qū)搜索、網(wǎng)絡(luò)注冊(cè),而 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)建的工程項(xiàng)目和獲取的OpenHarmony源碼。如果是打開OpenHarmony源碼,在打開工程時(shí),點(diǎn)擊
    發(fā)表于 04-12 11:16

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

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

    OpenHarmony Camera源碼分析

    OpenHarmony Camera源碼工作整個(gè)流程。關(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如何用,下面小編帶來(lái)openharmony刷機(jī)教程。 openharmony從代碼倉(cāng)庫(kù)源碼獲取概述 首先注冊(cè)碼云gitee賬號(hào)以及碼云SSH公鑰,之
    的頭像 發(fā)表于 06-22 10:37 ?3066次閱讀

    openharmony升級(jí) openharmony源碼獲取

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

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

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

    openharmony源碼解讀

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

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

    在通過(guò)DevEco Device Tool創(chuàng)建OpenHarmony工程時(shí),可自動(dòng)下載相應(yīng)版本的OpenHarmony源碼
    的頭像 發(fā)表于 04-19 21:40 ?616次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【創(chuàng)建工程并獲取<b class='flag-5'>源碼</b>】