zoukankan      html  css  js  c++  java
  • Android CameraHal 类图分析

    先看一下CameraHAL整体的类图。

    很乱,我们一块一块的看。

    第一部分,CameraAdapter的继承关系:

    V4LCameraAdapter

      V4LCameraAdapter是处于最底层的类,他负责跟硬件的通讯,并且实现了大部分的控制功能。

      V4LCameraAdapter内部定义了PreviewThread线程。

      V4LCameraAdapter的mVideoinfo实现了对VideoInfo的引用,而VideoInfo定义了Camera Video的相关信息。

    BaseCameraAdapter

      BaseCameraAdapter实现了MessageNotifier及FrameNotifier的全部接口,及一些不需要与硬件交互的接口。而下列接口都由V4LCameraAdapter实现:

        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的交互。

  • 相关阅读:
    【UVA116】 单向TSP Unidirectional TSP [动态规划]
    【luogu4408】 [NOI2003]逃学的小孩 [动态规划 树的直径]
    【POJ2631】树的直径 [动态规划 树形dp]
    【luogu 1156】 垃圾陷阱 [动态规划 背包]
    【luogu1472】 奶牛家谱 Cow Pedigrees [动态规划]
    【luogu2747】 [USACO5.4]周游加拿大Canada Tour[动态规划]
    【luogu2737】 [USACO4.1]麦香牛块Beef McNuggets [动态规划 完全背包][数学 扩展欧几里德]
    【luogu3856】【TJOI2008】公共子串 [动态规划]
    【luogu1020】 导弹拦截 [动态规划LIS]
    【luogu1439】 【模板】最长公共子序列 [动态规划][LIS最长上升子序列][离散化]
  • 原文地址:https://www.cnblogs.com/leino11121/p/3332653.html
Copyright © 2011-2022 走看看