精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OH-v3.0-LTS Camera相機驅動框架(L2)解析3_創建流的準備

原創
系統 OpenHarmony
先為流操作接口創建一個上層回調,然后通過IPC調用到CameraDeviceImpl的GetStreamOperator接口獲取流操作的實例。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

1. 簡單回顧

先簡單回顧總結下前面兩章的內容要點

  • Camera HDI框架是通過綁定到HDF框架后在系統啟動的時候完成初始化 Camera Host 實例。
  • 應用層通過獲取Camera Host 實例來得到設備支持的Camera的能力屬性,并Open相應的設備。
  • 應用層通過IPC通訊來調用HDI接口

補充說明

在前面CameraHostImpl::Init()創建CameraDevice實例對象的時候會實例化PipelineCore的各個子模塊包括HostStreamMgr、StreamPipelineCore對應的功能會在下面的文章逐一說明。

本章開始略去IPC通訊相關的代碼(包括流程圖),讀者可以參考第一章中SetCallback流程自行梳理代碼。

2. 回到代碼

應用層完成CameraDevice初始化后 開始創建流 相關的上層調用代碼相對簡單,這里簡單畫個圖,大家可以對著代碼梳理下。我們從CreatStrem開始繼續往下看。

先丟一個本章代碼涉及到的流程圖

2.1 Hos3516Demo::GetStreamOpt()

先為 流操作 接口創建一個上層回調,然后通過IPC調用到CameraDeviceImpl的GetStreamOperator接口獲取流操作的實例。

//drivers\peripheral\camera\hal\init\3516_demo.cpp
void Hos3516Demo::GetStreamOpt()
{
int rc = 0;

if (streamOperator_ == nullptr) {
const sptr<IStreamOperatorCallback> streamOperatorCallback = new StreamOperatorCallback();
rc = demoCameraDevice_->GetStreamOperator(streamOperatorCallback, streamOperator_);
if (rc != Camera::NO_ERROR) {
CAMERA_LOGE("demo test: GetStreamOpt GetStreamOperator fail\n");
streamOperator_ = nullptr;
}
}
}

CameraDeviceImpl負責實例化StreamOperator對象,并調用StreamOperator::Init() 完成初始化。

//drivers\peripheral\camera\hal\hdi_impl\src\camera_device\camera_device_impl.cpp
CamRetCode CameraDeviceImpl::GetStreamOperator(
const OHOS::sptr<IStreamOperatorCallback> &callback,
OHOS::sptr<IStreamOperator> &streamOperator)
{
...
spCameraDeciceCallback_ = callback;
if (spStreamOperator_ == nullptr) {
spStreamOperator_ = new(std::nothrow) StreamOperator(spCameraDeciceCallback_, shared_from_this());
if (spStreamOperator_ == nullptr) {
CAMERA_LOGW("create stream operator failed.");
return DEVICE_ERROR;
}
spStreamOperator_->Init();
ismOperator_ = spStreamOperator_;
}
streamOperator = ismOperator_;
...
}

StreamOperator::Init() 會從前面實例化的CameraDevice對象中取出已經實例化好的StreamPipelineCore對象調用對應的Init初始化,同時創建一個進程接收特定的消息。

//drivers\peripheral\camera\hal\hdi_impl\src\stream_operator\stream_operator.cpp
RetCode StreamOperator::Init()
{
...
pipelineCore_ = dev->GetPipelineCore();
...
streamPipeline_ = pipelineCore_->GetStreamPipelineCore();
...
RetCode rc = streamPipeline_->Init();
...
auto cb = [this](MessageGroup& m) { HandleCallbackMessage(m); };
messenger_ = std::make_shared<CaptureMessageOperator>(cb);
CHECK_IF_PTR_NULL_RETURN_VALUE(messenger_, RC_ERROR);
messenger_->StartProcess();

return RC_OK;
}

StreamPipelineCore::Init()繼續實例化StreamPipelineStrategy、StreamPipelineBuilder、StreamPipelineDispatcher 這3個類。它們是負責pipeNode的創建和控制的,現在我們只要記得代碼已經把它們實例化完成并放在了StreamPipelineCore里。

RetCode StreamPipelineCore::Init()
{
strategy_ = StreamPipelineStrategy::Create(context_->streamMgr_);
builder_ = StreamPipelineBuilder::Create(context_->streamMgr_);
dispatcher_ = StreamPipelineDispatcher::Create();
return RC_OK;
}

到這里StremOperator(下面紅框的部分)就創建好了,然后通過IPC回傳給上層應用。

整個的StremOperator創建涉及到比較多的類 對應的關系可以看下下面的類圖(個人理解,非官方)

2.2 Hos3516Demo::SetStreamInfo()

創建一個流信息 StreamInfo 這里的代碼相對簡單,設置這個流的分辨率、編碼模式、流ID等等。

這里要注意的是bufferQueue_ 這個成員。下面會先簡單講一下,算是挖個坑。

然后tunneledMode = 5這個地方感覺是個BUG 因為在后續的HDI代碼部分 實際是個bool類型。

void Hos3516Demo::SetStreamInfo(std::shared_ptr<StreamInfo>& streamInfo,
const std::shared_ptr<StreamCustomer>& streamCustomer,
const int streamId, const StreamIntent intent)
{
constexpr uint32_t datasapce = 8;
constexpr uint32_t tunneledMode = 5;

if (intent == PREVIEW) {
constexpr uint32_t width = 640;
constexpr uint32_t height = 480;
streamInfo->width_ = width;
streamInfo->height_ = height;
} else if (intent == STILL_CAPTURE) {
constexpr uint32_t width = 1280;
constexpr uint32_t height = 960;
streamInfo->width_ = width;
streamInfo->height_ = height;
streamInfo->encodeType_ = ENCODE_TYPE_JPEG;
} else {
constexpr uint32_t width = 1280;
constexpr uint32_t height = 960;
streamInfo->width_ = width;
streamInfo->height_ = height;
streamInfo->encodeType_ = ENCODE_TYPE_H265;
}

streamInfo->streamId_ = streamId;
streamInfo->format_ = PIXEL_FMT_YCRCB_420_SP;
streamInfo->datasapce_ = datasapce;
streamInfo->intent_ = intent;
streamInfo->tunneledMode_ = tunneledMode;
streamInfo->bufferQueue_ = streamCustomer->CreateProducer();
streamInfo->bufferQueue_->SetQueueSize(8); // 8:set bufferQueue size
}

StreamCustomer::CreateProducer()

這里的OHOS::Surface 涉及到了Graphic子系統中的Surface。Surface 是圖形緩沖區管理接口,負責管理圖形緩沖區和高效便捷的輪轉緩沖區。

詳細的說明可以看下源碼中的Readme路徑在:foundation/graphic/standard/README_zh.md。

是這里按照我個人的理解先簡單的說一下:

Surface分成了一個“生產者” 一個 “消費者”。應用端作為“消費者”向Surface模塊申請一個Surface。當對應的“生產者”產生了數據就會通知“消費者” 對數據進行處理。

StreamCustomer::CreateProducer()做了兩件事情

  • 為上層應用獲取了一個“消費型”surface
  • 從獲取到的surface中取出對應的“生產者”對象放在了StremInfo的信息里 丟給StreamOperator
//drivers\peripheral\camera\hal\init\stream_customer.cpp
sptr<OHOS::IBufferProducer> StreamCustomer::CreateProducer()
{
consumer_ = OHOS::Surface::CreateSurfaceAsConsumer(); //Buffer的消費者來使用該函數創建一個Surface
if (consumer_ == nullptr) {
return nullptr;
}
sptr<IBufferConsumerListener> listener = new TestBuffersConsumerListener();
consumer_->RegisterConsumerListener(listener); //注冊一個消費監聽器,監聽Buffer的Flush事件

auto producer = consumer_->GetProducer(); //獲得一個Surface內部的IBufferProducer對象
if (producer == nullptr) {
return nullptr;
}

CAMERA_LOGI("demo test, create a buffer queue producer %{public}p", producer.GetRefPtr());
return producer;
}

3. 小結

代碼到這邊 上層應用已經獲取到了HDI層的StreamOperator對象實例。同時為圖像數據準備了一個Surface!

同樣挖了兩個小坑,留待后面的代碼進一步講解

  • StreamPipelineStrategy、StreamPipelineBuilder、StreamPipelineDispatcher 這些類是怎么工作的?
  • Surface的“生產者”在哪里?

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-02-14 13:52:04

OpenHarmor系統鴻蒙

2022-02-25 15:33:45

圖像采集鴻蒙Camera相機

2022-01-06 16:16:21

鴻蒙HarmonyOS應用

2014-11-25 13:28:17

openstackneutronDVR

2022-02-17 16:47:40

OpenharmonIPC通信鴻蒙

2021-10-20 19:14:30

緩存CacheCPU

2015-01-20 13:19:52

OpenStack網絡層數據鏈路層

2022-02-21 15:38:57

Openharmon操作系統鴻蒙

2022-06-22 09:14:23

事件打點HiSysEvent

2023-01-31 09:12:16

CPU芯片緩存

2023-02-13 15:54:49

2022-08-26 14:58:43

區塊鏈比特幣架構

2022-07-04 16:41:16

IPC通信HiTrace

2022-04-21 11:26:31

鴻蒙操作系統

2022-07-14 19:03:33

IPC服務鴻蒙

2023-11-27 08:21:49

Camera2API,

2023-10-10 15:33:55

機器學習相似性度量

2021-11-01 17:31:21

Camera2 相機開發

2021-10-27 11:29:49

Linux框架內核

2023-02-20 08:00:00

點贊
收藏

51CTO技術棧公眾號

亚洲精品久久久久国产| 亚洲一区二区欧美激情| 91久久偷偷做嫩草影院| 国产真实夫妇交换视频| 欧美成人午夜77777| 一道本成人在线| 亚洲美女自拍偷拍| 亚洲三区在线播放| 麻豆精品在线观看| 午夜精品久久久久久久99热 | 国产精品一区在线| 午夜精品免费视频| 影音先锋男人资源在线观看| 精品国产一区二区三区不卡蜜臂 | 久久人人爽人人爽爽久久| 无码国产69精品久久久久网站 | 欧美ab在线视频| 亚洲男人av在线| 爽爽爽在线观看| 筱崎爱全乳无删减在线观看| 亚洲欧美色图小说| 日本一区二区三区视频在线播放 | 激情视频在线播放| 台湾亚洲精品一区二区tv| 91精品国产91综合久久蜜臀| 国产1区2区在线| 国产极品人妖在线观看| 黄色国产在线| 美女免费久久| 麻豆成人91精品二区三区| 国内外成人免费激情在线视频网站 | 国产伦理久久久| 国产又粗又猛又爽又黄的| 激情亚洲网站| 欧美成年人视频| 午夜精品久久久久99蜜桃最新版| 天天做夜夜做人人爱精品| 日韩美女视频一区二区在线观看| 热久久这里只有精品| 中文字幕在线有码| 99久久亚洲精品蜜臀| 亚洲欧洲日产国码av系列天堂| 少妇献身老头系列| 美国十次综合久久| 91麻豆精品国产91久久久久久久久 | 91九色对白| av在线资源观看| 精品无人码麻豆乱码1区2区| 国产精品影院在线观看| wwwwww在线观看| 老司机午夜免费精品视频 | 国产噜噜噜噜噜久久久久久久久| 亚洲成人av影片| 校园激情久久| 青草热久免费精品视频| 久久免费激情视频| 久久中文在线| 国产精品亚洲自拍| 在线观看日批视频| 国产一区二区三区在线观看精品| 成人久久久久爱| av综合在线观看| 高清不卡一二三区| 成人在线资源网址| 日本人妻熟妇久久久久久 | 久久精品国产综合精品| 色播色播色播色播色播在线| 2023国产精品视频| 日本在线播放一区| 日本在线观看免费| 亚洲精品乱码久久久久久| 福利在线一区二区| 午夜激情在线播放| 欧美自拍丝袜亚洲| www.久久com| 北条麻妃在线一区二区免费播放| 精品精品国产高清a毛片牛牛 | 亚洲欧洲无码一区二区三区| 中文字幕av日韩精品| 亚洲欧美成人影院| 天天操天天干天天综合网| 久久久久久久久久久久久国产精品| 欧美成人精品三级网站| 亚洲欧美一区二区视频| 蜜臀av.com| caoporn视频在线观看| 色综合一个色综合亚洲| 中文字幕永久有效| 成人看片黄a免费看视频| 亚洲精品一区二区三区婷婷月| 成熟人妻av无码专区| 综合精品一区| 欧美一区第一页| 亚洲自拍第二页| 成人va在线观看| 亚洲制服中文| 成人观看网址| 欧美久久高跟鞋激| 极品粉嫩小仙女高潮喷水久久 | 秋霞在线一区二区| 麻豆免费版在线观看| 欧美日韩国产中文| 捆绑裸体绳奴bdsm亚洲| 欧美激情777| 久久免费高清视频| 一区二区三区日| 91在线看国产| 国内精品国产三级国产99| 天堂√中文最新版在线| 日韩一区二区在线看片| 日本精品在线观看视频| 亚洲国产精品第一区二区三区| 国产精品欧美激情在线播放| 蜜臀av中文字幕| 国产精品久久久久久久蜜臀| 欧美日韩性生活片| 精品国产不卡一区二区| 国产亚洲视频在线观看| 日产精品久久久久久久| 狠狠网亚洲精品| 日本一区二区三区视频在线观看| 免费在线国产视频| 在线播放一区二区三区| 谁有免费的黄色网址| 亚洲精品一二| 国产69精品久久久久9999apgf| 五月婷婷在线视频| 在线观看一区不卡| 国产肉体xxxx裸体784大胆| 国产一区激情| 亚洲va电影大全| 麻豆av免费在线观看| 欧美专区日韩专区| 亚洲午夜久久久久久久久红桃 | 国产精品日韩精品中文字幕| 97高清免费视频| 亚洲国产精品一| 亚洲精品国产a| 免费黄频在线观看| 91欧美国产| 国产精品欧美一区二区| 国产香蕉在线| 欧美三级韩国三级日本三斤| 欧洲美熟女乱又伦| 玖玖精品视频| 欧美国产综合视频| 电影天堂国产精品| 亚洲人av在线影院| 日韩精品一区不卡| 国产欧美日韩精品a在线观看| 已婚少妇美妙人妻系列| 九九久久精品| 国产精品黄色av| 欧美69xxxx| 日韩色视频在线观看| 久久香蕉精品视频| 波多野结衣在线一区| 国产成人在线免费看| 秋霞影视一区二区三区| 浅井舞香一区二区| 岛国最新视频免费在线观看| 欧美中文字幕一区二区三区| 日韩av片在线免费观看| 国模大尺度一区二区三区| 艳母动漫在线观看| 136福利精品导航| 97免费在线视频| 毛片免费在线播放| 欧美日韩精品免费| 欧美黑人猛猛猛| 成人午夜视频网站| 欧美视频第三页| 四季av在线一区二区三区| 91久久国产婷婷一区二区| 青青在线视频| 亚洲精品视频网上网址在线观看| 亚洲精品国产无码| 亚洲视频免费在线观看| 日本性生活一级片| 久久综合伊人| 99亚洲精品视频| 精品国产影院| 国产精自产拍久久久久久蜜| 午夜影院免费在线| 精品一区二区三区四区在线| 性色av一区二区三区四区| 亚洲美女少妇撒尿| 天天插天天射天天干| 秋霞电影一区二区| 欧美国产日韩激情| 成人精品影院| 国产伦精品一区二区三区视频免费 | 亚洲精品一二三区区别| 狠狠久久综合婷婷不卡| 国产精品久久久久久妇女| 欧美激情一级欧美精品| 成人影院免费观看| 亚洲成人黄色在线观看| 欧美性受xxx黑人xyx性爽| 亚洲综合成人在线| 亚欧精品视频一区二区三区| 成人午夜av在线| 激情 小说 亚洲 图片: 伦| 欧美日韩一卡| 亚洲国产成人不卡| 欧美一区二区三区久久| 成人天堂噜噜噜| 免费电影日韩网站| 欧美精品999| 九七电影韩国女主播在线观看| 日韩av网址在线观看| 国产偷拍一区二区| 欧美三区免费完整视频在线观看| 久久久精品视频在线 | 国产中文字字幕乱码无限| 中文字幕av一区二区三区高 | 国产精品第12页| 国内自拍视频一区二区三区| 亚洲毛片aa| 国产欧美高清视频在线| 国产伦视频一区二区三区| av国产精品| 国产欧美va欧美va香蕉在| 三上悠亚亚洲一区| 77777少妇光屁股久久一区| 视频在线观看入口黄最新永久免费国产 | 国产理论电影在线观看| 日韩激情片免费| 欧美一级性视频| 欧美一级精品在线| 国产精品女同一区二区| 欧美性淫爽ww久久久久无| 台湾佬中文在线| 欧美午夜宅男影院在线观看| 久久9999久久免费精品国产| 一区二区三区四区视频精品免费| 任我爽在线视频| 一区二区中文视频| 亚洲 欧美 变态 另类 综合| 中文字幕一区二区在线观看| 香蕉久久久久久久| 国产精品久久夜| 18啪啪污污免费网站| 国产欧美日韩一区二区三区在线观看| 黄色国产在线观看| 91色.com| 国产小视频自拍| 国产日韩精品视频一区| 国产视频三区四区| 国产精品网站在线播放| jizzjizz日本少妇| 最新久久zyz资源站| 黄色录像二级片| 一区二区三区高清在线| 国产一级在线视频| 婷婷中文字幕综合| 99久久久久久久久| 欧美性生活大片视频| 中文字幕在线观看第二页| 精品视频色一区| 97超视频在线观看| 日韩视频免费观看高清完整版 | 中文字幕亚洲区| 永久免费看片视频教学| 亚洲人午夜精品天堂一二香蕉| 日韩在线观看视频一区二区| 亚洲香肠在线观看| 成人午夜视频精品一区| 91国偷自产一区二区三区观看| 欧美成人精品网站| 欧美一区二区在线免费观看| 黄色福利在线观看| 亚洲丝袜在线视频| 老司机午夜在线视频| 亚洲 日韩 国产第一| 成人开心激情| 91免费看网站| 伊人久久大香线蕉无限次| 亚洲欧美日韩国产yyy| 欧美91精品| 免费毛片小视频| 麻豆精品在线看| 久久福利小视频| 国产视频视频一区| 久草网视频在线观看| 欧美性xxxx极品高清hd直播| 亚洲视频一区在线播放| 精品国偷自产国产一区| av在线二区| 久久久久久久999| av成人在线观看| 国产欧美一区二区三区另类精品| 国产一区二区在线| 日韩黄色片在线| 日本三级亚洲精品| 精品国产av色一区二区深夜久久| 国产日韩欧美亚洲| 国产精品suv一区二区69| 欧美日精品一区视频| 狠狠躁夜夜躁av无码中文幕| 中文字幕av日韩| 免费看男女www网站入口在线 | 亚洲中文字幕久久精品无码喷水| 国产尤物一区二区| 免费一级黄色录像| 精品久久久久久久久国产字幕| 国产一区二区三区视频免费观看| 亚洲精品xxx| 污污视频在线| 国产在线观看一区二区三区 | 丰满女人性猛交| 亚洲欧美视频| 精品久久久久久无码人妻| 免费在线欧美视频| 91精品国产高清91久久久久久| 国产欧美日韩综合精品一区二区 | 日本高清成人免费播放| 亚洲av综合色区无码一二三区| 中文国产亚洲喷潮| 中文在线а√在线8| av一本久道久久波多野结衣| 95精品视频| 欧美日韩国产三区| 亚洲日韩视频| av影片在线播放| 国产精品电影一区二区| 中文在线第一页| 日韩精品日韩在线观看| 国产污视频在线播放| 99久久综合狠狠综合久久止| 亚洲精品一二三区区别| 欧美一级xxxx| 中文字幕综合网| 中文字幕自拍偷拍| 中文字幕欧美视频在线| 91av一区| 亚欧洲精品在线视频免费观看| 久久午夜激情| 精品无码人妻一区二区免费蜜桃 | 日韩av黄色网址| 91在线观看下载| 日韩欧美三级在线观看| 亚洲精品福利在线观看| 国产精品原创| 久久99精品久久久久久秒播放器| 亚洲裸体俱乐部裸体舞表演av| 成年人小视频在线观看| 亚洲1区2区3区视频| 午夜视频福利在线| 日韩免费高清在线观看| 欧州一区二区| 91亚洲免费视频| 亚洲色图欧洲色图婷婷| 99热这里只有精| 欧美黄色性视频| 欧美黄色网视频| 欧美女人性生活视频| 久久婷婷综合激情| 超碰在线免费97| 色综久久综合桃花网| 精品欧美视频| 九九热只有这里有精品| 99精品国产99久久久久久白柏| 国产高清中文字幕| 国产亚洲一区二区精品| 亚洲人体在线| 成人一级生活片| 久久色.com| 国产又粗又猛又色又| 久久久久久伊人| 一区二区三区日本久久久| 波多结衣在线观看| 亚洲日本在线天堂| 无码国产精品高潮久久99| 国产精品video| 欧美fxxxxxx另类| 久久久精品人妻无码专区| 欧美日韩在线三级| 在线看一级片| 欧美极品一区| 国产自产2019最新不卡| 亚洲 欧美 日韩 综合| 在线日韩中文字幕| 中文字幕久久精品一区二区 | 亚洲人成在线观看| 99tv成人影院| 69堂免费视频| 亚洲色图在线看| 你懂的在线看| 成人av影视在线| 日本视频免费一区| 日本一区二区三区免费视频| 一区二区欧美激情| 综合欧美亚洲| 天天干天天玩天天操| 五月天中文字幕一区二区| 秋霞午夜理伦电影在线观看| 狠狠色综合网站久久久久久久| 精品在线你懂的| 亚洲精品男人天堂|