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

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/leino11121/p/3332653.html
Copyright © 2011-2022 走看看