Android CameraHal 類圖分析

先看一下CameraHAL總體的類圖。html

很亂,咱們一塊一塊的看。android

第一部分,CameraAdapter的繼承關係:ide

V4LCameraAdapter函數

  V4LCameraAdapter是處於最底層的類,他負責跟硬件的通信,而且實現了大部分的控制功能。學習

  V4LCameraAdapter內部定義了PreviewThread線程。spa

  V4LCameraAdapter的mVideoinfo實現了對VideoInfo的引用,而VideoInfo定義了Camera Video的相關信息。線程

BaseCameraAdapterhtm

  BaseCameraAdapter實現了MessageNotifier及FrameNotifier的所有接口,及一些不須要與硬件交互的接口。而下列接口都由V4LCameraAdapter實現:blog

    takePicture [android::BaseCameraAdapter]
    stopImageCapture [android::BaseCameraAdapter]
    startBracketing [android::BaseCameraAdapter]
    stopBracketing [android::BaseCameraAdapter]
    beginAutoFocusThread [android]
    autoFocus [android::BaseCameraAdapter]
    cancelAutoFocus [android::BaseCameraAdapter]
    startSmoothZoom [android::BaseCameraAdapter]
    stopSmoothZoom [android::BaseCameraAdapter]
    startPreview [android::BaseCameraAdapter]
    stopPreview [android::BaseCameraAdapter]
    useBuffers [android::BaseCameraAdapter]
    fillThisBuffer [android::BaseCameraAdapter]
    getFrameSize [android::BaseCameraAdapter]
    getFrameDataSize [android::BaseCameraAdapter]
    getPictureBufferSize [android::BaseCameraAdapter]
    startFaceDetection [android::BaseCameraAdapter]
    stopFaceDetection [android::BaseCameraAdapter]
    switchToExecuting [android::BaseCameraAdapter]
    disableMirror [android::BaseCameraAdapter]繼承

 

   BaseCameraAdapter定義了兩個消息隊列mFrameQ及mAdapterQ,但這兩個消息隊列沒有被使用到。因此,初步推斷,CameraAdapter與其餘線程交互的接口徹底是FrameNotifier的回調函數實現的。在回調函數的實現中會調用到消息隊列,從而達到與其餘線程交互的目的。

   現有的理解,須要格外關注的實現是enableMsgType相關的應用,TODO:由此入手,學習AdapterCamera的相關內容:Android CameraHal CameraAdapter相關(1)

 

 CameraAdapter

  CameraAdapter是接口類,成員函數徹底由其子類實現。

  另外定義了一些枚舉變量,用於指示狀態,命令類型等:

    AdapterActiveStates [android::CameraAdapter]
    CameraCommands [android::CameraAdapter]
    CameraMode [android::CameraAdapter]
    AdapterState [android::CameraAdapter]

 

第二部分:從線程入手:

右下兩個線程,NotificationThread及DisplayThread,二者都是使用消息隊列實現調用的。

  NotificationThread定義在AppCallbackNotifier中,負責與上層應用的交互,主要是消息通知及傳遞Frame等。

  DisplayThread定義在ANativeWindowDisplayAdapter中,負責與NativeWindow的交互,負責顯示部分的交互。

而ANativeWindowDisplayAdapter與AppCallbackNotifier則是經過引用FrameProvider實現與CameraAdapter的交互。

相關文章
相關標籤/搜索