乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      FS_S5PC100平臺(tái)上Android Camera架構(gòu)分析

       kkq292 2014-05-09
       

      FS_S5PC100平臺(tái)上Android Camera架構(gòu)分析

      分類: linux嵌入式方向 2329人閱讀 評(píng)論(3) 收藏 舉報(bào)

      作者:劉洪濤,華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心講師。

      1. Android-Camera架構(gòu)分析

      Android的camera系統(tǒng)架構(gòu)自上而下分別為應(yīng)用層-框架層-硬件抽象層-linux驅(qū)動(dòng)層。層與層之間通過(guò)Binder、回調(diào)函數(shù)或者系統(tǒng)調(diào)用聯(lián)系。

      我們主要關(guān)心的是CameraService與CameraHAL之間的聯(lián)系以及CameraHAL本身的實(shí)現(xiàn)。

      2. CameraService

      系統(tǒng)初始化時(shí)會(huì)開(kāi)啟一個(gè)CameraService的守護(hù)進(jìn)程,為上層應(yīng)用提供camera對(duì)應(yīng)的功能接口。并與與硬件抽象層之間通過(guò)回調(diào)函數(shù)傳遞數(shù)據(jù)。

      CameraService的實(shí)現(xiàn)位于:

      frameworks/base/camera/libcameraservice/CameraService.cpp

      CameraService的主要功能有取景Preview,拍照takePicture和攝影Recording

      CameraService在整個(gè)Android-Camera架構(gòu)處于如下位置:

      3. Camera-HAL

      HAL層的實(shí)現(xiàn)和具體硬件平臺(tái)相關(guān)。Android定義好了它的接口,是一個(gè)C++的類和幾個(gè)回調(diào)函數(shù),定義位于頭文件:

      frameworks/base/include/ui/CameraHardwareInterface.h

      FS_S5PC100平臺(tái)的Camera-HAL的實(shí)現(xiàn)位于:

      vendor/farsight/fs_proprietary/libcamera/

      其中,SecCameraHWInterface.cpp是真正的HAL實(shí)現(xiàn),SecCamera.cpp則是對(duì)攝像頭具體操作的封裝,SecCameraHWInterface中會(huì)包含一個(gè)SecCamera類的對(duì)象。

      需要注意的是雖然Camera-HAL已經(jīng)實(shí)現(xiàn)好了,我們還是需要稍作改動(dòng)才能讓它工作。

      首先,需要修改攝像頭對(duì)應(yīng)的設(shè)備文件名:

      vendor/farsight/fs_proprietary/libcamera/SecCamera.h
              #define CAMERA_DEV_NAME "/dev/video0"

      默認(rèn)設(shè)備文件是/dev/video0,但是在這個(gè)定制過(guò)的éclair里面,video0已經(jīng)被libfimc打開(kāi),這里再次打開(kāi)的話就會(huì)失敗。我們也不能用video1,因?yàn)樗鼤?huì)被libcopybit打開(kāi),因此只能使用video2:

      #define CAMERA_DEV_NAME "/dev/video2"

      其次,需要對(duì)預(yù)覽和拍照的格式進(jìn)行設(shè)置:

      vendor/farsight/fs_proprietary/libcamera/SecCameraHWInterface.cpp
              p.setPreviewFormat("yuv420sp");
              p.setPictureFormat("yuv422i");

      4. CameraService與Camera-HAL的聯(lián)系

      在CameraHardwareInterface.h中,定義了一個(gè)由C語(yǔ)言方式導(dǎo)出符號(hào)的函數(shù):

      /** factory function to instantiate a camera hardware object */
              extern "C" sp<CameraHardwareInterface> openCameraHardware();

      這樣,CameraService就可以調(diào)用openCameraHardware得到一個(gè)CameraHardwareInterface,從而實(shí)現(xiàn)Camera的底層操作。

      另外,在CameraHardwareInterface.h中,還定義了三個(gè)回調(diào)函數(shù)原型:

      typedef void (*notify_callback)(int32_t msgType,
                                                                                   int32_t ext1,
                                                                                   int32_t ext2,
                                                                                   void* user);

      typedef void (*data_callback)(int32_t msgType,
                                                                                   const sp<IMemory>& dataPtr,
                                                                                   void* user);

      typedef void (*data_callback_timestamp)(nsecs_t timestamp,
                                                                                   int32_t msgType,
                                                                                   const sp<IMemory>& dataPtr,
                                                                                   void* user);

      這三個(gè)回調(diào)函數(shù)均由CameraService::client來(lái)實(shí)現(xiàn),繼而在Cmaera-HAL中回調(diào)這些函數(shù)來(lái)向CameraService傳遞消息或者視頻數(shù)據(jù)流。

      其中,notify_callback主要用于傳遞一些消息,如按下快門(mén)或者開(kāi)始/停止預(yù)覽等等;

      data_callback用于返回Camera-HAL得到的raw data;
              data_callback_timestamp用于返回Camera-HAL得到的raw data并攜帶時(shí)間戳(用于同步);

      CameraHardwareInterface還需實(shí)現(xiàn)消息使能的方法:

      virtual void enableMsgType(int32_t msgType) = 0;

      用于指定msg對(duì)應(yīng)的callback是否可用。比如:

      enableMsgType(CAMERA_MSG_PREVIEW_FRAME),則data_callback可用。

      二者的調(diào)用關(guān)系如下圖:

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多