Android4.2之Camera系统HAL调用流程
1.模块
hardware/libhardware/include/hardware/camera_common.h
- typedef struct camera_module {
- hw_module_t common;
- int (*get_number_of_cameras)(void);
- int (*get_camera_info)(int camera_id, struct camera_info *info);
- } camera_module_t;
2.设备
hardware/libhardware/include/hardware/camera.h
- typedef struct camera_device {
- /**
- * camera_device.common.version must be in the range
- * HARDWARE_DEVICE_API_VERSION(0,0)-(1,FF). CAMERA_DEVICE_API_VERSION_1_0 is
- * recommended.
- */
- hw_device_t common;
- camera_device_ops_t *ops;
- void *priv;
- } camera_device_t;
二、流程
1.模块获取
frameworks/av/services/camera/libcameraservice/CameraService.cpp
- void CameraService::onFirstRef(){
- BnCameraService::onFirstRef();
- if (hw_get_module(CAMERA_HARDWARE_MODULE_ID,
- (const hw_module_t **)&mModule) < 0) { //获取Module
- ALOGE("Could not load camera HAL module");
- mNumberOfCameras = 0;
- }
- else {
- mNumberOfCameras = mModule->get_number_of_cameras();
- // if(mNumberOfCameras <= 0) mNumberOfCameras = 1 ;
- char istv [10];
- memset(istv,0,sizeof(istv));
- if (property_get("tv.tvstart_status", istv, NULL) > 0){
- ALOGD("tv.tvstart_status = %s ,mNumberOfCameras = %d \n",istv,mNumberOfCameras+1);
- }
- if(strcmp(istv,"false") == 0)
- mNumberOfCameras = mNumberOfCameras+1 ;
- if (mNumberOfCameras > MAX_CAMERAS) {
- ALOGE("Number of cameras(%d) > MAX_CAMERAS(%d).",
- mNumberOfCameras, MAX_CAMERAS);
- mNumberOfCameras = MAX_CAMERAS;
- }
- for (int i = 0; i < mNumberOfCameras; i++) {
- setCameraFree(i);
- }
- }
- }
2.设备获取
frameworks/av/services/camera/libcameraservice/CameraService.cpp
- sp<ICamera> CameraService::connect(
- const sp<ICameraClient>& cameraClient, int cameraId) {
- int deviceVersion;
- if (mModule->common.module_api_version == CAMERA_MODULE_API_VERSION_2_0) {
- deviceVersion = info.device_version;
- } else {
- deviceVersion = CAMERA_DEVICE_API_VERSION_1_0;
- }
- switch(deviceVersion) {
- case CAMERA_DEVICE_API_VERSION_1_0:
- client = new CameraClient(this, cameraClient, cameraId, info.facing, callingPid, getpid());
- break;
- case CAMERA_DEVICE_API_VERSION_2_0:
- client = new Camera2Client(this, cameraClient, cameraId, info.facing, callingPid, getpid());
- break;
- default:
- ALOGE("Unknown camera device HAL version: %d", deviceVersion);
- return NULL;
- }
- if (client->initialize(mModule) != OK) {
- return NULL;
- }
- }
frameworks/av/services/camera/libcameraservice/CameraClient.cpp
- status_t CameraClient::initialize(camera_module_t *module) {
- mHardware = new CameraHardwareInterface(camera_device_name);
- res = mHardware->initialize(&module->common);
- }
frameworks/av/services/camera/libcameraservice/CameraHardwareInterface.h
- status_t initialize(hw_module_t *module){
- int rc = module->methods->open(module, mName.string(), (hw_device_t **)&mDevice); //获得Device
- }
Android4.2之Camera系统HAL调用流程相关推荐
- android从应用到驱动之—camera(1)---程序调用流程
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...
- 51全志R58平台Android4.4下Camera的HAL层修改
51全志R58平台Android4.4下Camera的HAL层修改 2018/11/7 15:20 版本:V1.0 开发板:SC5806 1.系统编译: (略) 2.全志R58平台Android4.4 ...
- linux 获取硬件时间,Linux的硬件时间及系统时间调用流程--转自网络
事实上在Linux中有两个时钟系统,分别是系统时间和硬件时间 UTC是协调世界时(Universal Time Coordinated)英文缩写,它比北京时间早8个小时. 二)date date可以打 ...
- Android Camera调用流程
一个流程图画的非常好的文章 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1.Packages/apps/到framewo ...
- Android Camera(5)---Android Camera调用流程
Android Camera调用流程 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1.Packages/apps/到fr ...
- Camera HAL Service流程总结
目录 前言 一.HIDL接口 1.CameraProvier 1.setCallback(ICameraProviderCallback callback) 2.getVendorTags 3.get ...
- 展锐camera 调用流程
本文将要为您介绍的是[Camera专题]Sprd-深入浅出Camera驱动框架1(HAL层-Kernel层),具体完成步骤: 一.前言 本文主要研究展讯平台Camera驱动和HAL层代码架构,熟悉展讯 ...
- 安卓 camera 调用流程_音视频开发之旅(四)Camera视频采集
目录 Camera基础知识 视频采集的流程 遇到的问题和常见的坑(重点) 收获 一. Camera基础知识 Camera 有几个重要的基础概念. facing相机的方向,一般后置摄像头和前置摄像头. ...
- 08.音频系统:第003课_Linux音频驱动程序:第003节_耳麦拔插事件调用流程分析
在前面的小节中,我们编写了一个驱动程序,模拟耳机的插拔事件,其可以上报耳机的拔插事件,并且修改了android的源代码,可以根据耳机的拔插事件,在状态栏上现实或者消除耳麦的图标,这节视频我们讲解耳麦插 ...
最新文章
- Codeforces Round #275 (Div. 2) c
- mybatis 一对多查询_Java自学之mybatis:使用注解方式多对一查询
- 淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道
- python考核总结_Python阶段总结
- flutter - 将数字转换为科学记数法并获得指数 flutter
- mysql innodb启动失败_mysql启动失败
- linux delete内存不下降_linux内存分配管理
- C++ 获取分辨率 获取桌面分辨率
- 计算机模拟学,深度学习是让计算机模拟
- android核心系列--1,组件生命周期
- cocos2d-x2.2.5走四棋儿源代码“开源”
- 安卓原生系统_安卓原生系统为什么比MIUI和EMUI等国产系统更流畅
- DM6437 GPIO模拟I2C
- 那些主流的淘宝客引流方法有哪些?
- OTB数据集和VOT数据集融合跟踪算法接口示例
- 3DS Max 2014启动报错的解决方案
- 本安型CAN中继器在无轨胶轮车中的应用
- 正则表达式与绕过案例
- 三星内存编码_三星内存编号命名揭秘
- 雷达多普勒频率计算公式_第二章 第四节 波的多普勒效应