日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android摄像头框架,FS_S5PC100平台上Android Camera架构分析

發布時間:2023/12/15 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android摄像头框架,FS_S5PC100平台上Android Camera架构分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Android-Camera架構分析

Android的camera系統架構自上而下分別為應用層-框架層-硬件抽象層-linux驅動層。層與層之間通過Binder、回調函數或者系統調用聯系。

我們主要關心的是CameraService與CameraHAL之間的聯系以及CameraHAL本身的實現。

2. CameraService

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

CameraService的實現位于:

frameworks/base/camera/libcameraservice/CameraService.cpp

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

CameraService在整個Android-Camera架構處于如下位置:

3. Camera-HAL

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

frameworks/base/include/ui/CameraHardwareInterface.h

FS_S5PC100平臺的Camera-HAL的實現位于:

vendor/farsight/fs_proprietary/libcamera/

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

需要注意的是雖然Camera-HAL已經實現好了,我們還是需要稍作改動才能讓它工作。

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

vendor/farsight/fs_proprietary/libcamera/SecCamera.h

#define CAMERA_DEV_NAME "/dev/video0"

默認設備文件是/dev/video0,但是在這個定制過的éclair里面,video0已經被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的聯系

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

/** factory function to instantiate a camera hardware object */

extern "C" sp openCameraHardware();

這樣,CameraService就可以調用openCameraHardware得到一個CameraHardwareInterface,從而實現Camera的底層操作。

另外,在CameraHardwareInterface.h中,還定義了三個回調函數原型:

typedef void (*notify_callback)(int32_t msgType,

int32_t ext1,

int32_t ext2,

void* user);

typedef void (*data_callback)(int32_t msgType,

const sp& dataPtr,

void* user);

typedef void (*data_callback_timestamp)(nsecs_t timestamp,

int32_t msgType,

const sp& dataPtr,

void* user);

這三個回調函數均由CameraService::client來實現,繼而在Cmaera-HAL中回調這些函數來向CameraService傳遞消息或者視頻數據流。

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

data_callback用于返回Camera-HAL得到的raw data;

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

CameraHardwareInterface還需實現消息使能的方法:

virtual void enableMsgType(int32_t msgType) = 0;

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

enableMsgType(CAMERA_MSG_PREVIEW_FRAME),則data_callback可用。

二者的調用關系如下圖:

總結

以上是生活随笔為你收集整理的android摄像头框架,FS_S5PC100平台上Android Camera架构分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。