<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          mtk camera configureStreams 流程

          共 14583字,需瀏覽 30分鐘

           ·

          2022-10-31 21:44

          f866c4f960218684a37ac55bd1e7f305.webp

          和你一起終身學(xué) 習(xí),這里是程序員Android

          經(jīng)典好文推薦,通過(guò)閱讀本文,您將收獲以下知識(shí)點(diǎn):

          一、camera configureStreams 流程
          二、Log 分析

          一、camera configureStreams 流程

          1.1 相機(jī)api簡(jiǎn)述

          as we all know Android Camera API的 步驟

          (1)、監(jiān)聽(tīng)和枚舉相機(jī)設(shè)備

              get_number_of_cameras、get_camera_characteristic

          (2)、打開設(shè)備并連接監(jiān)聽(tīng)器

              connect、open

          (3)、配置目標(biāo)使用情形的輸出(如static 、capture、video等)

               configure_stream

          (4)、為目標(biāo)使用情形創(chuàng)建請(qǐng)求 (5)捕獲/重復(fù)請(qǐng)求和連拍

          process_capture_request

          (6) 、接受結(jié)果metadata和圖片數(shù)據(jù)

          proces_capture_result

          (7)、切換使用情形時(shí),返回第三步
          1.2 原文閱讀

          The framework calls camera3_device_t->ops->configure_streams() with a list * of input/output streams to the HAL device.

          簡(jiǎn)單翻譯-->

          framework調(diào)用結(jié)構(gòu)體camera_device方法ops調(diào)用結(jié)構(gòu)體camera3_device_ops的configure_streams方法配流,camera3_device_t-> ops-> configure_streams(),并把input stream&output stream 的列表作為參數(shù)送到Hal層。

          1.3 結(jié)構(gòu)體

          hardware/libhardware/include/hardware/camera3.h

          camera3_device_ops_t 映射函數(shù)指針操作: hardware/libhardware/modules/camera/3_0/Camera.cpp

          1.4 代碼流程

          hardware/interfaces/camera/device/3.2/default/CameraDeviceSession.cpp

              Return<void> CameraDeviceSession::configureStreams(
          const StreamConfiguration& requestedConfiguration,
          ICameraDeviceSession::configureStreams_cb _hidl_cb) {
          Status status = initStatus();
          HalStreamConfiguration outStreams;

          ATRACE_BEGIN("camera3->configure_streams");
          status_t ret = mDevice->ops->configure_streams(mDevice, &stream_list);
          ATRACE_END();
          }

          frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

              status_t Camera3Device::configureStreamsLocked(int operatingMode,
          const CameraMetadata& sessionParams, bool notifyRequestThread) {


          //配流開始log
          ALOGV("%s: Camera %s: Starting stream configuration", __FUNCTION__, mId.string());

          ...

          //創(chuàng)建buffer

          const camera_metadata_t *sessionBuffer = sessionParams.getAndLock();
          res = mInterface->configureStreams(sessionBuffer, &config, bufferSizes);

          //這里還有重新配流的代碼,省略

          // Update device state
          const camera_metadata_t *newSessionParams = sessionParams.getAndLock();
          省略部分代碼

          ALOGV("%s: Camera %s: Stream configuration complete", __FUNCTION__, mId.string());

          // tear down the deleted streams after configure streams.
          mDeletedStreams.clear();

          return OK;
          }

          status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *sessionParams,
          camera3_stream_configuration *config, const std::vector<uint32_t>& bufferSizes) {
          ATRACE_NAME("CameraHal::configureStreams");
          ...
          auto err = mHidlSession_3_4->configureStreams_3_4(
          requestedConfiguration3_4, configStream34Cb);
          ...

          return res;
          }

          vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp

              //V3_4
          Return<void>
          ThisNamespace::
          configureStreams_3_3(const V3_2::StreamConfiguration& requestedConfiguration, configureStreams_3_3_cb _hidl_cb)
          { 省略部分代碼
          err = onConfigureStreamsLocked(requestedConfiguration, halStreamConfiguration);

          }

          vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp

              auto
          ThisNamespace::
          onConfigureStreamsLocked(
          const WrappedStreamConfiguration& requestedConfiguration,
          WrappedHalStreamConfiguration& halConfiguration
          ) -> ::android::status_t
          {
          IAppStreamManager::ConfigAppStreams appStreams;
          auto pAppStreamManager = getSafeAppStreamManager();

          err = pAppStreamManager->beginConfigureStreams(requestedConfiguration, halConfiguration, appStreams);
          auto pPipelineModel = getSafePipelineModel();
          err = pPipelineModel->configure(pParams); //配置pipeline
          err = pAppStreamManager->endConfigureStreams(halConfiguration);
          }

          vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/app/AppStreamMgr.cpp

          auto
          AppStreamMgr::
          beginConfigureStreams(
          const V3_5::StreamConfiguration& requestedConfiguration,
          V3_4::HalStreamConfiguration& halConfiguration,
          ConfigAppStreams& rStreams
          ) -> int
          {
          auto err = mConfigHandler->beginConfigureStreams(requestedConfiguration, halConfiguration, rStreams);
          }

          vendor/mediatek/proprietary/hardware/mtkcam/main/hal/device/3.x/app/AppStreamMgr.ConfigHandler.cpp

          簡(jiǎn)述下這里面干了些啥事

          1 .檢測(cè)stream
          2 .設(shè)置OperationMode
          3.生成MetaStreamInfo,并把前者加到Stream中

              auto
          ThisNamespace::
          beginConfigureStreams(
          const V3_5::StreamConfiguration& requestedConfiguration,
          V3_4::HalStreamConfiguration& halConfiguration,
          ConfigAppStreams& rStreams
          ) -> int
          {
          rStreams.vMinFrameDuration.add( //這塊為上層下發(fā)的流配置格式
          pStreamInfo->getStreamId(),
          mEntryMinDuration.itemAt(j + 3, Type2Type<MINT64>())
          );
          rStreams.vStallFrameDuration.add( //這塊為上層下發(fā)的流配置格式
          pStreamInfo->getStreamId(),
          mEntryStallDuration.itemAt(j + 3, Type2Type<MINT64>())
          );
          MY_LOGI("[addFrameDuration] format:%" PRId64 " size:%" PRId64 "x%" PRId64 " min_duration:%" PRId64 ", stall_duration:%" PRId64 ,
          mEntryMinDuration.itemAt(j, Type2Type<MINT64>()),
          mEntryMinDuration.itemAt(j + 1, Type2Type<MINT64>()),
          mEntryMinDuration.itemAt(j + 2, Type2Type<MINT64>()),
          mEntryMinDuration.itemAt(j + 3, Type2Type<MINT64>()),
          mEntryStallDuration.itemAt(j + 3, Type2Type<MINT64>()));
          break;

          mFrameHandler->setOperationMode((uint32_t)requestedConfiguration.v3_4.operationMode);
          std::string const streamName = "Meta:App:Control";
          auto pStreamInfo = createMetaStreamInfo(streamName.c_str(), streamId);
          mFrameHandler->addConfigStream(pStreamInfo);

          rStreams.vMetaStreams.add(streamId, pStreamInfo);
          }
          sp<AppImageStreamInfo> pStreamInfo = mFrameHandler->getConfigImageStream(streamId);
          mFrameHandler->addConfigStream(pStreamInfo.get(), false/*keepBufferCache*/);

          //physical settings
          String8 const streamName = String8::format("Meta:App:Physical_%s", ((std::string)srcStream.physicalCameraId).c_str());
          StreamId_T const streamId = eSTREAMID_BEGIN_OF_PHYSIC_ID + (int64_t)pcId;
          auto pMetaStreamInfo = createMetaStreamInfo(streamName.c_str(), streamId, pcId);
          mFrameHandler->addConfigStream(pMetaStreamInfo);
          rStreams.vMetaStreams_physical.add(pcId, pMetaStreamInfo);
          }
          }
          }

          vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/app/AppStreamMgr.FrameHandler.cpp

          這塊有一些具體的函數(shù)就不繼續(xù)羅列了

          圖略

          二、Log分析

              08-26 11:30:38.599694  4145  4164 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] +
          08-26 11:30:38.662202 4145 4164 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] -


          08-26 11:30:38.602389 4145 4164 D mtkcam-AppStreamMgr: [beginConfigureStreams] StreamConfiguration=

          {.v3_4 = {.streams = [3]{

          {.v3_2 ={.id = 0, .streamType = OUTPUT, .width = 1920, .height = 1080, .format = IMPLEMENTATION_DEFINED,

          .usage = CPU_READ_NEVER | CPU_WRITE_NEVER | GPU_TEXTURE (0x100),

          .dataSpace = UNKNOWN | STANDARD_UNSPECIFIED | TRANSFER_UNSPECIFIED | RANGE_UNSPECIFIED (0), .rotation = ROTATION_0}, .physicalCameraId = "", .bufferSize = 0},

          {.v3_2 = {.id = 1, .streamType = OUTPUT, .width = 4096, .height = 2304, .format = BLOB,

          .usage = CPU_READ_NEVER | CPU_READ_RARELY | CPU_READ_OFTEN | CPU_WRITE_NEVER (0x3),

          .dataSpace = UNKNOWN | STANDARD_UNSPECIFIED | STANDARD_BT601_625 | TRANSFER_UNSPECIFIED | TRANSFER_LINEAR | TRANSFER_SRGB | TRANSFER_SMPTE_170M | RANGE_UNSPECIFIED | RANGE_FULL | V0_JFIF (0x8c20000),

          .rotation = ROTATION_0}, .physicalCameraId = "", .bufferSize = 14227317},

          {.v3_2 = {.id = 2, .streamType = OUTPUT, .width = 176, .height = 144, .format = YCBCR_420_888,

          .usage = CPU_READ_NEVER | CPU_READ_RARELY | CPU_READ_OFTEN | CPU_WRITE_NEVER (0x3),
          (mva=0x0/sec=0/prot=0/alpha=1:0xff/blend=0002/dim=0/fmt=4868/range=1(20000000)/x=0 y=65 w=1080 h=1 s=1088,66 -> x=0 y=0 w=1080 h=1/layer_type=0 ext_layer=-1 ds=0 fbdc=0) !


          08-26 11:30:38.602796 4145 4164 W mtkcam-AppStreamMgr: [0-ConfigHandler::checkStream] framework stream dataspace:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL)

          {.v3_2 = {.id = 1, .streamType = OUTPUT, .width = 4096, .height = 2304, .format = BLOB,

          .usage = CPU_READ_NEVER | CPU_READ_RARELY | CPU_READ_OFTEN | CPU_WRITE_NEVER (0x3),

          .dataSpace = UNKNOWN | STANDARD_UNSPECIFIED | STANDARD_BT601_625 | TRANSFER_UNSPECIFIED | TRANSFER_LINEAR | TRANSFER_SRGB | TRANSFER_SMPTE_170M | RANGE_UNSPECIFIED | RANGE_FULL | V0_JFIF (0x8c20000),

          .rotation = ROTATION_0}, .physicalCameraId = "", .bufferSize = 14227317}


          08-26 11:30:38.602905 4145 4164 W mtkcam-AppStreamMgr: [0-ConfigHandler::checkStream] framework stream dataspace:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL)

          {.v3_2 = {.id = 2, .streamType = OUTPUT, .width = 176, .height = 144, .format = YCBCR_420_888,

          .usage = CPU_READ_NEVER | CPU_READ_RARELY | CPU_READ_OFTEN | CPU_WRITE_NEVER (0x3),

          .dataSpace = UNKNOWN | STANDARD_UNSPECIFIED | STANDARD_BT601_625 | TRANSFER_UNSPECIFIED | TRANSFER_LINEAR | TRANSFER_SRGB | TRANSFER_SMPTE_170M | RANGE_UNSPECIFIED | RANGE_FULL | V0_JFIF (0x8c20000),

          .rotation = ROTATION_0}, .physicalCameraId = "", .bufferSize = 0}


          08-26 11:30:38.603083 4145 4164 I mtkcam-AppStreamMgr: [0-FrameHandler::setOperationMode] operationMode change: 0xffffffff -> 0

          08-26 11:30:38.608006 4145 4164 I mtkcam-AppStreamMgr: [0-ConfigHandler::operator()] [addFrameDuration] format:34 size:1920x1080 min_duration:33333333, stall_duration:0
          08-26 11:30:38.608019 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::beginConfigureStreams] Stream: id:0 streamType:0 1920x1080 format:0x22 usage:0x100 dataSpace:0x0 rotation:0
          08-26 11:30:38.608033 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] isSecureCameraDevice=0 usageForHal=0x0x20033 usageForHalClient=0x0x3
          08-26 11:30:38.608047 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] grallocRequest.format=33, grallocRequest.usage = 0x20033
          08-26 11:30:38.608058 4145 4164 I mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] BLOB with widthInPixels(14227317), heightInPixels(1), bufferSize(14227317)
          08-26 11:30:38.609436 4145 4164 I mtkcam-AppStreamMgr: stream id len : 0
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] rStream.v_32.usage(0x3)
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: rStream-Info(sid=0x1, format=0x21, usage=0x3, StreamType::OUTPUT=0x0, streamType=0x0)
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: grallocStaticInfo(format=0x21)
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: HalStream-info(producerUsage= 0x20033, consumerUsage= 0, overrideFormat=0x21 )
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: Blob-info(imgFmt=0x2300, allocImgFmt=0x21, allocBufPlanes(size=1, sizeInBytes=14227317, rowStrideInBytes=14227317)
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: Misc-info(usageForAllocator=0x20033, NSCam::BufferUsage::PROT_CAMERA_BIDIRECTIONAL=0x64000) NSCam::BufferUsage::E2E_HDR=0x50030000)
          08-26 11:30:38.609452 4145 4164 D mtkcam-AppStreamMgr: creationInfo(secureInfo=0x0)
          08-26 11:30:38.609494 4145 4164 I mtkcam-AppStreamMgr: [0-ConfigHandler::operator()] [addFrameDuration] format:33 size:4096x2304 min_duration:66666666, stall_duration:33333333
          08-26 11:30:38.609508 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::beginConfigureStreams] Stream: id:1 streamType:0 4096x2304 format:0x21 usage:0x3 dataSpace:0x8c20000 rotation:0
          08-26 11:30:38.609524 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] isSecureCameraDevice=0 usageForHal=0x0x20033 usageForHalClient=0x0x3
          08-26 11:30:38.609539 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::createImageStreamInfo] grallocRequest.format=35, grallocRequest.usage = 0x20033
          08-26 11:30:38.610509 4145 4164 I mtkcam-AppStreamMgr: [0-ConfigHandler::operator()] [addFrameDuration] format:35 size:176x144 min_duration:33333333, stall_duration:0
          08-26 11:30:38.610527 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::beginConfigureStreams] Stream: id:2 streamType:0 176x144 format:0x23 usage:0x3 dataSpace:0x8c20000 rotation:0
          08-26 11:30:38.610540 4145 4164 D mtkcam-AppStreamMgr: [0-ConfigHandler::beginConfigureStreams] operationmode 0 videoWidth is 4096 videoWidth1 is 1920
          08-26 11:30:38.610608 4145 4164 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] pParams.vPhysicCameras(0)
          08-26 11:30:38.610618 4145 4164 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] pImageStreamBufferProvider 0x0

          08-26 11:30:38.662202 4145 4164 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] -
          08-26 11:30:38.662271 4145 4164 I mtkcam-dev3: [0-session::tryRunCommandLocked] Run command onConfigureStreamsLocked -

          這塊是設(shè)置上層下發(fā)的流的格式。

          2.1 config stage log
          2.1.1 PipelineModelSessionFactory log
          log具體含義,看《MTK_camera_pipeline_framework.pdf》

              02-04 11:25:35.639   921   921 D mtkcam-PipelineModelSession-Factory: [convertToUserConfiguration] APP set init frame : 1, if not be zero, force it to be 4
          02-04 11:25:35.641 921 921 I mtkcam-PipelineModelSession-Factory: [convertToUserConfiguration] force 3rd flow
          02-04 11:25:35.641 921 921 I mtkcam-PipelineModelSession-Factory: [convertToUserConfiguration] dual cam device(s:0,path:1) forceFeatureMode(1) pack jpeg(0) physical(0) s(16) c(1)

          02-04 11:25:33.979 921 11876 D mtkcam-PipelineModelSession-Factory: [parseAppStreamInfo] ispTuningDataEnable(0) StreamId(0) ConsumerUsage(2304) size(1440,1080) yuv_isp_tuning_data_size(1280,720) raw_isp_tuning_data_size(2560,1920)
          02-04 11:25:33.979 921 11876 D mtkcam-PipelineModelSession-Factory: [parseAppStreamInfo] ispTuningDataEnable(0) StreamId(0x2) ConsumerUsage(3) size(1440,1080) yuv_isp_tuning_data_size(1280,720) raw_isp_tuning_data_size(2560,1920)

          02-04 11:25:35.643 921 921 I mtkcam-PipelineModelSession-Factory: [decidePipelineModelSession] Vsdof

          StreamId: pStreamInfo->getStreamId()

          size(1440,1080) :StreamSize

          yuv_isp_tuning_data_size(1280,720) :Tuning data size

          raw_isp_tuning_data_size(2560,1920) :Tuning data size

          Vsdof : PipelineModelSession類型為 Zoom

          原文鏈接:https://blog.csdn.net/weixin_38328785/article/details/108581219

          友情推薦:

          Android 開發(fā)干貨集錦

          至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺(jué)得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請(qǐng)聯(lián)系小編刪除,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!

          點(diǎn)擊閱讀原文,為大佬點(diǎn)贊!

          瀏覽 181
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产黄色视频观看 | 日日干综合 | www.色自拍 | 好吊操在线视频 | 操操逼逼|