免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
FS_S5PC100平臺上Android Camera架構(gòu)分析
userphoto

2014.05.09

關注
 

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

分類: linux嵌入式方向 2329人閱讀 評論(3) 收藏 舉報

作者:劉洪濤,華清遠見嵌入式培訓中心講師。

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

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

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

2. CameraService

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

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

frameworks/base/camera/libcameraservice/CameraService.cpp

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

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

3. Camera-HAL

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

frameworks/base/include/ui/CameraHardwareInterface.h

FS_S5PC100平臺的Camera-HAL的實現(xiàn)位于:

vendor/farsight/fs_proprietary/libcamera/

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

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

首先,需要修改攝像頭對應的設備文件名:

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

默認設備文件是/dev/video0,但是在這個定制過的éclair里面,video0已經(jīng)被libfimc打開,這里再次打開的話就會失敗。我們也不能用video1,因為它會被libcopybit打開,因此只能使用video2:

#define CAMERA_DEV_NAME "/dev/video2"

其次,需要對預覽和拍照的格式進行設置:

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

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

在CameraHardwareInterface.h中,定義了一個由C語言方式導出符號的函數(shù):

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

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

另外,在CameraHardwareInterface.h中,還定義了三個回調(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);

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

其中,notify_callback主要用于傳遞一些消息,如按下快門或者開始/停止預覽等等;

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

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

virtual void enableMsgType(int32_t msgType) = 0;

用于指定msg對應的callback是否可用。比如:

enableMsgType(CAMERA_MSG_PREVIEW_FRAME),則data_callback可用。

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

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android的Camera架構(gòu)介紹
Android Camera分析
Android系統(tǒng)中視頻電話中camera部分數(shù)據(jù)流分析
Android Camera API2.0下全新的Camera FW/HAL架構(gòu)簡述
介紹 Android 的 Camera 框架
Camera顯示之Hal層的適配(一)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服