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

OH-v3.0-LTS Camera相機驅動框架(L2)解析之創建流

原創
系統 OpenHarmony
本篇接著上章的代碼繼續往下看,將創建好的StreamInfo作為參數丟給StreamOperator進行流的創建

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

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

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

接著上章的代碼繼續往下看,將創建好的StreamInfo作為參數丟給StreamOperator進行流的創建

程序調用流程圖

1. StreamOperator::CreateStreams()

創建過程

  • 實例化一個stream對象,用stremInfos中的參數信息對相關成員進行賦值。
  • 創建一個StreamTunnel對象,把StreamTunnel和stream進行綁定。
  • 把創建好的每一個stream 對應它的stremId 放在 streamMap_里。
//drivers\peripheral\camera\hal\hdi_impl\src\stream_operator\stream_operator.cpp
CamRetCode StreamOperator::CreateStreams(const std::vector<std::shared_ptr<StreamInfo>>& streamInfos)
{
...
for (auto it : streamInfos) {
...

std::shared_ptr<IStream> stream = StreamFactory::Instance().CreateShared(
IStream::g_avaliableStreamType[it->intent_], it->streamId_, it->intent_, pipelineCore_, messenger_);

...

StreamConfiguration scg;
scg.id = it->streamId_;
scg.type = it->intent_;
scg.width = it->width_;
scg.height = it->height_;
PixelFormat pf = static_cast<PixelFormat>(it->format_);
scg.format = BufferAdapter::PixelFormatToCameraFormat(pf);
scg.dataspace = it->datasapce_; // fix misspell
scg.tunnelMode = it->tunneledMode_;
scg.minFrameDuration = it->minFrameDuration_;
scg.encodeType = it->encodeType_;

RetCode rc = stream->ConfigStream(scg);

...

if (it->bufferQueue_ != nullptr) {
auto tunnel = std::make_shared<StreamTunnel>();
CHECK_IF_PTR_NULL_RETURN_VALUE(tunnel, INSUFFICIENT_RESOURCES);
RetCode rc = tunnel->AttachBufferQueue(it->bufferQueue_);
CHECK_IF_NOT_EQUAL_RETURN_VALUE(rc, RC_OK, INVALID_ARGUMENT);
if (stream->AttachStreamTunnel(tunnel) != RC_OK) {
CAMERA_LOGE("attach buffer queue to stream [id = %{public}d] failed", it->streamId_);
return INVALID_ARGUMENT;
}
}
{
std::lock_guard<std::mutex> l(streamLock_);
streamMap_[stream->GetStreamId()] = stream;
}
}
return NO_ERROR;
}

這里需要注意的一個地方RetCode rc = tunnel->AttachBufferQueue(it->bufferQueue_);單獨把這個代碼帖出來看下

//drivers\peripheral\camera\hal\hdi_impl\src\stream_operator\stream_tunnel.cpp
RetCode StreamTunnel::AttachBufferQueue(OHOS::sptr<OHOS::IBufferProducer>& producer)
{
CHECK_IF_PTR_NULL_RETURN_VALUE(producer, RC_ERROR);
bufferQueue_ = OHOS::Surface::CreateSurfaceAsProducer(producer); //Buffer的生產者使用該函數創建一個Surface,只能使用與生產相關的接口
CHECK_IF_PTR_NULL_RETURN_VALUE(bufferQueue_, RC_ERROR);
return RC_OK;
}

這個成員函數的作用就是把應用層中的StreamCustomer::CreateProducer()獲取的producer作為參數創建與“消費者”對應的“生成型”Surface。 而StreamTunnel類就是對這個生成型Surface的一個功能封裝。

2. StreamOperator::CommitStreams()

源碼有點長 去掉一些參數的校驗和準備相關的代碼

一共調用 StreamBase::CommitStream() 、StreamPipelineCore::PreConfig()、StreamPipelineCore::CreatePipeline()三個函數

下面一個個來看

//drivers\peripheral\camera\hal\hdi_impl\src\stream_operator\stream_operator.cpp
CamRetCode StreamOperator::CommitStreams(OperationMode mode,
const std::shared_ptr<CameraStandard::CameraMetadata>& modeSetting)
{
...
{
std::lock_guard<std::mutex> l(streamLock_);
for (auto it : streamMap_) {
if (it.second->CommitStream() != RC_OK) {
CAMERA_LOGE("commit stream [id = %{public}d] failed.", it.first);
return DEVICE_ERROR;
}
}
}
RetCode rc = streamPipeline_->PreConfig(modeSetting);
if (rc != RC_OK) {
CAMERA_LOGE("prepare mode settings failed");
return DEVICE_ERROR;
}
rc = streamPipeline_->CreatePipeline(mode);
if (rc != RC_OK) {
CAMERA_LOGE("create pipeline failed.");
return INVALID_ARGUMENT;
}

DFX_LOCAL_HITRACE_END;
return NO_ERROR;
}

2.1 StreamBase::CommitStream()

按照代碼LOG中的說明commit a stream to pipeline。大家可以自行理解,本人的理解是

  • 通過BufferManager創建并初始化BufferPool 數據緩存池
  • 給這個Stream對應的pipeline 創建一個StreamMgr,讓pipeline可以通過StreamMgr對Stream進行對應的控制。
//drivers\peripheral\camera\hal\hdi_impl\src\stream_operator\stream_base.cpp
RetCode StreamBase::CommitStream()
{
...

HostStreamInfo info;
info.type_ = static_cast<StreamIntent>(streamType_);
info.streamId_ = streamId_;
info.width_ = streamConfig_.width;
info.height_ = streamConfig_.height;
info.format_ = streamConfig_.format;
info.usage_ = streamConfig_.usage;
info.encodeType_ = streamConfig_.encodeType;

if (streamConfig_.tunnelMode) {
BufferManager* mgr = BufferManager::GetInstance();
CHECK_IF_PTR_NULL_RETURN_VALUE(mgr, RC_ERROR);

if (bufferPool_ == nullptr) {
poolId_ = mgr->GenerateBufferPoolId();
CHECK_IF_EQUAL_RETURN_VALUE(poolId_, 0, RC_ERROR);

bufferPool_ = mgr->GetBufferPool(poolId_);
if (bufferPool_ == nullptr) {
CAMERA_LOGE("stream [id:%{public}d] get buffer pool failed.", streamId_);
return RC_ERROR;
}
}

info.bufferPoolId_ = poolId_;
info.bufferCount_ = GetBufferCount();
RetCode rc = bufferPool_->Init(streamConfig_.width, streamConfig_.height, streamConfig_.usage,
streamConfig_.format, GetBufferCount(), CAMERA_BUFFER_SOURCE_TYPE_EXTERNAL);
if (rc != RC_OK) {
CAMERA_LOGE("stream [id:%{public}d] initialize buffer pool failed.", streamId_);
return RC_ERROR;
}
}

RetCode rc = hostStreamMgr_->CreateHostStream(info, [this](std::shared_ptr<IBuffer> buffer) {
HandleResult(buffer);
return;
});

...

return RC_OK;
}

2.2 StreamPipelineCore::PreConfig()

這里的代碼比較簡單,根據參數信息,調用deviceManager的PreConfig接口從來配置下面的硬件設備。

deviceManager在前面PowerUp的解析已經說明了,Hi3516實際上是將硬件適配層相關的代碼都封閉在了so里面,

所以這里實際調用就一行代碼sysObject_->PreConfig(meta, settings);

//drivers\peripheral\camera\hal\pipeline_core\pipeline_impl\src\stream_pipeline_core.cpp
RetCode StreamPipelineCore::PreConfig(const ModeMeta& meta)
{
auto deviceManager = IDeviceManager::GetInstance();
CHECK_IF_PTR_NULL_RETURN_VALUE(deviceManager, RC_ERROR);

std::vector<DeviceStreamSetting> settings = {};
std::vector<int32_t> ids = {};
context_->streamMgr_->GetStreamIds(ids);
for (auto i : ids) {
auto info = context_->streamMgr_->GetStreamInfo(i);
DeviceStreamSetting setting = {info.streamId_, info.bufferCount_, info.width_, info.height_,
info.format_, info.usage_, static_cast<CameraEncodeType>(info.encodeType_)};
settings.emplace_back(setting);
}
return deviceManager->PreConfig(meta, settings);
}

2.3 StreamPipelineCore::CreatePipeline()

有關stategy、builder、dispatcher實現的函數代碼比較多,大家感興趣自行閱讀。總的說一下整體功能:

  • StreamPipelineStrategy 負責根據mode從對應的配置文件中創建pipeline。
  • StreamPipelineBuilder 負責創建Node并鏈接
  • StreamPipelineDispatcher 負責管理創建好的pipeline
  • 最終建立的StreamPipeline是由Node(節點)組成,Node(節點)由Port(端口)組成。Port(端口)分為in端口和out端口(可以有多個)。out鏈接in最終構建出整個StreamPipeline

Demo案例建立了兩個streamPipeline

//drivers\peripheral\camera\hal\pipeline_core\pipeline_impl\src\stream_pipeline_core.cpp
RetCode StreamPipelineCore::CreatePipeline(const int32_t& mode)
{
std::lock_guard<std::mutex> l(mutex_);
std::shared_ptr<PipelineSpec> spec = strategy_->GeneratePipelineSpec(mode);
if (spec == nullptr) {
return RC_ERROR;
}
std::shared_ptr<Pipeline> pipeline = builder_->Build(spec);
if (pipeline == nullptr) {
return RC_ERROR;
}
return dispatcher_->Update(pipeline);
}

需要注意幾個問題

  1. pipeline的配置文件在drivers\peripheral\camera\hal\pipeline_core\pipeline_impl\src\strategy\config目錄下的config.c和params.c
  2. 這兩個文件是由BUILD.gn 腳本生成的。
//drivers\peripheral\camera\hal\adapter\chipset\hispark_taurus\BUILD.gn
source =
"$camera_path/pipeline_core/pipeline_impl/src/strategy/config/config.c"
exec_script(
"http://drivers/framework/tools/hc-gen/build_hcs.py",
[
"-o",
rebase_path(
"$camera_path/pipeline_core/pipeline_impl/src/strategy/config/config.c"),
"-t",
rebase_path(
"http://vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/camera/hal/mpp/hispark_taurus/pipeline_core/config.hcs"),
],
"")
}

ohos_prebuilt_etc("params.c") {
source =
"$camera_path/pipeline_core/pipeline_impl/src/strategy/config/params.c"
exec_script(
"http://drivers/framework/tools/hc-gen/build_hcs.py",
[
"-o",
rebase_path(
"$camera_path/pipeline_core/pipeline_impl/src/strategy/config/params.c"),
"-t",
rebase_path(
"http://vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/camera/hal/mpp/hispark_taurus/pipeline_core/params.hcs"),
],
"")
}

3. 小結

到此流的創建也完成了,最后一章節會把圖像采集的代碼講解完。

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

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

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

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

2022-02-25 15:33:45

圖像采集鴻蒙Camera相機

2022-02-08 15:07:45

OpenHarmor鴻蒙操作系統

2022-01-06 16:16:21

鴻蒙HarmonyOS應用

2022-02-21 15:38:57

Openharmon操作系統鴻蒙

2022-02-17 16:47:40

OpenharmonIPC通信鴻蒙

2014-11-25 13:28:17

openstackneutronDVR

2022-06-22 09:14:23

事件打點HiSysEvent

2021-10-20 19:14:30

緩存CacheCPU

2022-04-21 11:26:31

鴻蒙操作系統

2015-01-20 13:19:52

OpenStack網絡層數據鏈路層

2023-11-27 08:21:49

Camera2API,

2023-02-13 15:54:49

2022-07-04 16:41:16

IPC通信HiTrace

2021-11-01 17:31:21

Camera2 相機開發

2022-07-14 19:03:33

IPC服務鴻蒙

2023-01-31 09:12:16

CPU芯片緩存

2021-10-27 11:29:49

Linux框架內核

2023-02-20 08:00:00

2023-10-10 15:33:55

機器學習相似性度量

2022-08-26 14:58:43

區塊鏈比特幣架構
點贊
收藏

51CTO技術棧公眾號

国产人与禽zoz0性伦| 国产永久免费网站| av在线二区| 国产在线观看免费一区| 久久久久久尹人网香蕉| 久久国产精品无码一级毛片| 日本中文字幕视频一区| 亚洲777理论| 在线不卡视频一区二区| 日本免费一区视频| 久久电影网站中文字幕| 91精品国产网站| 国产在线观看免费视频软件| 欧美三级电影在线| 666欧美在线视频| 国内性生活视频| 超碰公开在线| 国产日韩精品一区二区三区| 成人在线看片| 一本一道人人妻人人妻αv| 日韩视频在线一区二区三区| www.欧美免费| 免费污网站在线观看| 77成人影视| 69堂精品视频| 天天干在线影院| 国内激情视频在线观看| 亚洲欧美电影院| 天堂资源在线亚洲视频| 视频三区在线观看| 国产成人午夜精品影院观看视频| 国产精品久久久久久久久粉嫩av | 狠狠操精品视频| 欧美人与动牲性行为| 国产精品久久久久婷婷二区次| 精品免费视频123区| 亚洲精品国偷拍自产在线观看蜜桃| 久久精品国产77777蜜臀| 日本国产高清不卡| 四虎精品永久在线| 一本色道久久| 91超碰caoporn97人人| 欧美另类视频在线观看| 中文字幕乱码亚洲无线精品一区 | 人人澡人人澡人人看| 日本一二区不卡| 国产亚洲精品美女久久久久| 播金莲一级淫片aaaaaaa| 精品在线网站观看| 亚洲国产精品成人一区二区| 丰满少妇xbxb毛片日本| 日本一区精品视频| 欧美大片免费久久精品三p| 亚洲av毛片在线观看| 日本在线视频一区二区三区| 日韩一级免费观看| 91超薄肉色丝袜交足高跟凉鞋| 狂野欧美xxxx韩国少妇| 日韩欧美一二三| 国产成人av片| 国产精品17p| 日韩av在线直播| 久久亚洲AV成人无码国产野外| 西野翔中文久久精品国产| 亚洲精品国产美女| 一级黄色片大全| 日韩av自拍| 欧美成在线观看| 日韩免费观看一区二区| 石原莉奈在线亚洲三区| 国产精品女主播| 国产女主播福利| 成人精品高清在线| 免费成人深夜夜行视频| h视频在线观看免费| 亚洲天天做日日做天天谢日日欢| 欧美日韩激情四射| 欧美办公室脚交xxxx| 在线视频你懂得一区二区三区| www.com黄色片| 日韩成人在线看| 日韩av在线导航| 国产一区二区三区四区在线| 欧美一区二区| 青青在线视频一区二区三区| 综合久久中文字幕| 国产成人免费在线| 欧美日韩无遮挡| 黄网站在线播放| 精品欧美激情精品一区| 91女神在线观看| 超碰地址久久| 日韩在线激情视频| 日本在线视频免费观看| 麻豆成人av在线| 国产精品免费一区二区三区| freemovies性欧美| 亚欧色一区w666天堂| mm131国产精品| 久久久久97| 久久精品久久久久久国产 免费| 日韩精品一区二区av| 九色综合狠狠综合久久| 国产综合欧美在线看| 日本www在线观看视频| 欧美日韩免费在线| 原创真实夫妻啪啪av| 精品久久91| 68精品国产免费久久久久久婷婷| 91亚洲视频在线观看| 久久久99精品免费观看不卡| wwwwww欧美| 激情中国色综合| 国产午夜精品麻豆| 精品亚洲永久免费| 国产在线精品一区二区不卡了 | 牛牛影视精品影视| 夜夜嗨av一区二区三区四季av| 中文字幕第36页| 色综合久久中文| 欧美激情一区二区久久久| 一区二区久久精品66国产精品| 99国产欧美久久久精品| 国产高清不卡无码视频| a一区二区三区亚洲| 亚洲人成电影网| 亚洲天堂日韩av| 国产·精品毛片| 乱熟女高潮一区二区在线| 91嫩草国产线观看亚洲一区二区| 在线播放国产一区中文字幕剧情欧美 | 国产精品一区高清| 午夜精品久久17c| 人妻91麻豆一区二区三区| 亚洲乱码日产精品bd| 在线能看的av网站| 首页国产精品| 国产专区精品视频| 日韩欧美小视频| 欧美日韩一区小说| 精品一区二区三孕妇视频| 日韩精品一二三| 日本在线视频不卡| 欧美色网一区| 一区二区三区美女xx视频| 日日骚av一区二区| 久久九九久精品国产免费直播| 99爱视频在线| 久久av超碰| 国产精品久久久久久久一区探花| 国产片在线观看| 欧美视频一二三区| 女同久久另类69精品国产| 久久91精品久久久久久秒播| 中文字幕欧美人与畜| 四虎国产精品成人免费影视| 久久夜色精品国产欧美乱| 国产女人18毛片18精品| 亚洲一区中文日韩| 人妻熟女aⅴ一区二区三区汇编| 国产欧美欧美| 日韩欧美精品在线不卡| av成人在线播放| 伦理中文字幕亚洲| 国精产品乱码一区一区三区四区| 午夜激情综合网| 色哟哟精品观看| 激情成人午夜视频| 日本黄色片一级片| 丝袜久久网站| 国产精品视频一| 亚洲综合影视| 亚洲精品福利在线| 中文字幕在线天堂| 亚洲欧美日韩国产一区二区三区 | 国产一区二区三区三州| 亚洲影视资源网| 免费看污片网站| 国产一区二区影院| 浮妇高潮喷白浆视频| 欧美一区二区三| 波多野结衣久草一区| 永久免费毛片在线播放| 日韩亚洲国产中文字幕| 国产 欧美 自拍| 欧美亚洲精品一区| 国产亚洲色婷婷久久99精品| 久久精品人人爽人人爽| 一级片免费在线观看视频| 久久不射网站| 色哟哟免费网站| 国产一区二区三区网| 1卡2卡3卡精品视频| 香蕉久久免费电影| 色综合五月天导航| 国产区在线视频| 精品少妇一区二区三区日产乱码 | hitomi一区二区三区精品| 国产理论在线播放| 一区福利视频| 中文字幕精品—区二区日日骚| 日韩在线黄色| 97av自拍| 日日夜夜亚洲| 国产suv精品一区二区| 羞羞网站在线看| 自拍偷拍亚洲在线| 桃花色综合影院| 欧美v国产在线一区二区三区| 一级一级黄色片| 精品国产鲁一鲁一区二区张丽| 暗呦丨小u女国产精品| 日本一区二区三区视频视频| 催眠调教后宫乱淫校园| 国产精品一二三四区| 久久久国产欧美| 亚洲欧美日韩国产| 成年人网站国产| 雨宫琴音一区二区三区| 亚洲欧美在线网| 免费电影一区二区三区| 精品久久精品久久| 国产精品qvod| 国产成人免费观看| 日韩精品一级| 91久久精品国产91久久| 久久精品97| 国产精品av在线| 亚洲一区站长工具| 午夜欧美大片免费观看| 成人免费一区二区三区牛牛| 欧美裸体xxxx极品少妇| 黄色在线免费| xx视频.9999.com| 日韩精品黄色| 日韩网站在线观看| 免费黄色在线网站| www.99久久热国产日韩欧美.com| 在线免费观看黄| 日日摸夜夜添一区| 老司机午夜在线| 久久久国产91| 99热国产在线| 欧美黑人性视频| 91精品国产黑色瑜伽裤| 国内揄拍国内精品少妇国语| 91黄页在线观看| 欧美有码在线视频| 日韩精品一区二区三区| 国产精品久久久久久久久久久久| 婷婷综合六月| 国产美女91呻吟求| 福利一区三区| 国产91亚洲精品一区二区三区| 6080成人| 欧美三级网色| 日韩毛片视频| 亚洲高潮无码久久| 伊人久久亚洲热| 男人操女人逼免费视频| 老鸭窝91久久精品色噜噜导演| 日本久久久久久久久久久久| 乱一区二区av| 香蕉视频在线观看黄| 不卡的av在线播放| 无码国产69精品久久久久同性| 欧美激情一区二区三区| 欧美风情第一页| 亚洲成人午夜电影| 国产精品51麻豆cm传媒 | 黄色一级a毛片| 日韩麻豆第一页| 日本美女在线中文版| 色综合久久天天综线观看| 久热在线观看视频| 国产欧美日韩精品在线观看| 日本一区二区三区电影免费观看| 激情小说网站亚洲综合网| 国产剧情一区| 欧美少妇一级片| 国产精品夜夜夜| 日本一二三区在线| 91美女在线视频| 波多野结衣久久久久| 亚洲成人在线观看视频| 伊人久久国产精品| 亚洲成年人在线播放| 国产在线视频网站| 欧美贵妇videos办公室| 国产一区二区三区朝在线观看| 亚洲综合在线小说| 亚洲免费成人av在线| 91精品一区二区三区四区| 久久激情久久| 日本泡妞xxxx免费视频软件| 久久免费电影网| 久久精品这里只有精品| 欧美三级视频在线观看| 日本毛片在线观看| 美女视频黄免费的亚洲男人天堂| 亚洲国产福利| 国产成人精品福利一区二区三区 | 欧美成人精品一区二区三区| 中文字幕这里只有精品| 444亚洲人体| 欧美日韩一二| 欧美韩国日本在线| 福利视频网站一区二区三区| 性色国产成人久久久精品| 黑人巨大精品欧美一区二区一视频 | 丁香花在线电影| 成人做爽爽免费视频| 国产伦一区二区三区| 999在线观看视频| 国产乱妇无码大片在线观看| 一级肉体全黄裸片| 欧美三级免费观看| 六月丁香综合网| 欧美日本在线视频中文字字幕| 久久er热在这里只有精品66| 日本欧美色综合网站免费| 99国产精品| 亚洲欧美日韩色| 亚洲国产毛片aaaaa无费看| 国产精品-色哟哟| 色哟哟亚洲精品一区二区| 老司机成人影院| 麻豆久久久9性大片| 亚洲美女91| 国产伦精品一区三区精东| 亚洲精品乱码久久久久久| ,亚洲人成毛片在线播放| 一区二区欧美久久| 亚洲综合av一区二区三区| 欧美一进一出视频| 丝袜美腿亚洲一区二区图片| 捆绑裸体绳奴bdsm亚洲| 亚洲制服丝袜av| 六月婷婷中文字幕| 韩国v欧美v日本v亚洲| jizz性欧美23| 免费无遮挡无码永久视频| 91麻豆精东视频| 亚洲天堂男人av| 国产午夜精品全部视频在线播放| 我爱我色成人网| 四虎一区二区| 免费成人在线视频观看| 国产激情av在线| 91麻豆精品国产91久久久使用方法| 欧美成年黄网站色视频| 亚洲综合小说区| 亚洲私人影院| 亚洲黄色免费在线观看| 日韩欧美精品中文字幕| 国产高清视频在线| 成人www视频在线观看| 你懂的视频一区二区| 免费观看污网站| 欧美午夜宅男影院在线观看| 国产三级电影在线| 成人免费在线网址| 尹人成人综合网| 99久久久无码国产精品性 | 亚洲国产精品二区| 2019最新中文字幕| 成人中文视频| 国产chinesehd精品露脸| 天天综合网天天综合色| 免费播放片a高清在线观看| 国产久一一精品| 欧美日韩理论| 极品人妻一区二区三区| 欧美性猛片xxxx免费看久爱| 国产最新在线| 久久精品日韩精品| 麻豆国产91在线播放| 国产中文字字幕乱码无限| 日韩精品中文字幕在线观看| 欧美激情啪啪| 97超碰在线人人| 国产精品午夜久久| 亚洲乱码国产乱码精品精软件| 欧美最顶级的aⅴ艳星| 99久久99热这里只有精品| 国产精品成人无码专区| 欧美三级一区二区| 国产拍在线视频| 致1999电视剧免费观看策驰影院| 成人免费毛片嘿嘿连载视频| 欧美在线视频精品| 欧美黑人xxxx| 日韩毛片视频| 亚洲精品理论片| 日韩写真欧美这视频| 日本精品在线中文字幕| 黄页免费在线观看视频| 亚洲欧美综合网| 欧美xxx.com| 国产精品一区二区三区精品|