一、重要结构体

1.模块

hardware/libhardware/include/hardware/camera_common.h

[cpp] view plaincopy
  1. typedef struct camera_module {
  2. hw_module_t common;
  3. int (*get_number_of_cameras)(void);
  4. int (*get_camera_info)(int camera_id, struct camera_info *info);
  5. } camera_module_t;

2.设备

hardware/libhardware/include/hardware/camera.h

[cpp] view plaincopy
  1. typedef struct camera_device {
  2. /**
  3. * camera_device.common.version must be in the range
  4. * HARDWARE_DEVICE_API_VERSION(0,0)-(1,FF). CAMERA_DEVICE_API_VERSION_1_0 is
  5. * recommended.
  6. */
  7. hw_device_t common;
  8. camera_device_ops_t *ops;
  9. void *priv;
  10. } camera_device_t;

二、流程

1.模块获取

frameworks/av/services/camera/libcameraservice/CameraService.cpp

[cpp] view plaincopy
  1. void CameraService::onFirstRef(){
  2. BnCameraService::onFirstRef();
  3. if (hw_get_module(CAMERA_HARDWARE_MODULE_ID,
  4. (const hw_module_t **)&mModule) < 0) { //获取Module
  5. ALOGE("Could not load camera HAL module");
  6. mNumberOfCameras = 0;
  7. }
  8. else {
  9. mNumberOfCameras = mModule->get_number_of_cameras();
  10. // if(mNumberOfCameras <= 0) mNumberOfCameras = 1 ;
  11. char istv [10];
  12. memset(istv,0,sizeof(istv));
  13. if (property_get("tv.tvstart_status", istv, NULL) > 0){
  14. ALOGD("tv.tvstart_status = %s ,mNumberOfCameras = %d \n",istv,mNumberOfCameras+1);
  15. }
  16. if(strcmp(istv,"false") == 0)
  17. mNumberOfCameras = mNumberOfCameras+1 ;
  18. if (mNumberOfCameras > MAX_CAMERAS) {
  19. ALOGE("Number of cameras(%d) > MAX_CAMERAS(%d).",
  20. mNumberOfCameras, MAX_CAMERAS);
  21. mNumberOfCameras = MAX_CAMERAS;
  22. }
  23. for (int i = 0; i < mNumberOfCameras; i++) {
  24. setCameraFree(i);
  25. }
  26. }
  27. }

2.设备获取
frameworks/av/services/camera/libcameraservice/CameraService.cpp

[cpp] view plaincopy
  1. sp<ICamera> CameraService::connect(
  2. const sp<ICameraClient>& cameraClient, int cameraId) {
  3. int deviceVersion;
  4. if (mModule->common.module_api_version == CAMERA_MODULE_API_VERSION_2_0) {
  5. deviceVersion = info.device_version;
  6. } else {
  7. deviceVersion = CAMERA_DEVICE_API_VERSION_1_0;
  8. }
  9. switch(deviceVersion) {
  10. case CAMERA_DEVICE_API_VERSION_1_0:
  11. client = new CameraClient(this, cameraClient, cameraId, info.facing, callingPid, getpid());
  12. break;
  13. case CAMERA_DEVICE_API_VERSION_2_0:
  14. client = new Camera2Client(this, cameraClient, cameraId, info.facing, callingPid, getpid());
  15. break;
  16. default:
  17. ALOGE("Unknown camera device HAL version: %d", deviceVersion);
  18. return NULL;
  19. }
  20. if (client->initialize(mModule) != OK) {
  21. return NULL;
  22. }
  23. }

frameworks/av/services/camera/libcameraservice/CameraClient.cpp

[cpp] view plaincopy
  1. status_t CameraClient::initialize(camera_module_t *module) {
  2. mHardware = new CameraHardwareInterface(camera_device_name);
  3. res = mHardware->initialize(&module->common);
  4. }

frameworks/av/services/camera/libcameraservice/CameraHardwareInterface.h

[cpp] view plaincopy
  1. status_t initialize(hw_module_t *module){
  2. int rc = module->methods->open(module, mName.string(), (hw_device_t **)&mDevice); //获得Device
  3. }

Android4.2之Camera系统HAL调用流程相关推荐

  1. android从应用到驱动之—camera(1)---程序调用流程

    一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...

  2. 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 ...

  3. linux 获取硬件时间,Linux的硬件时间及系统时间调用流程--转自网络

    事实上在Linux中有两个时钟系统,分别是系统时间和硬件时间 UTC是协调世界时(Universal Time Coordinated)英文缩写,它比北京时间早8个小时. 二)date date可以打 ...

  4. Android Camera调用流程

    一个流程图画的非常好的文章 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1.Packages/apps/到framewo ...

  5. Android Camera(5)---Android Camera调用流程

    Android Camera调用流程 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1.Packages/apps/到fr ...

  6. Camera HAL Service流程总结

    目录 前言 一.HIDL接口 1.CameraProvier 1.setCallback(ICameraProviderCallback callback) 2.getVendorTags 3.get ...

  7. 展锐camera 调用流程

    本文将要为您介绍的是[Camera专题]Sprd-深入浅出Camera驱动框架1(HAL层-Kernel层),具体完成步骤: 一.前言 本文主要研究展讯平台Camera驱动和HAL层代码架构,熟悉展讯 ...

  8. 安卓 camera 调用流程_音视频开发之旅(四)Camera视频采集

    目录 Camera基础知识 视频采集的流程 遇到的问题和常见的坑(重点) 收获 一. Camera基础知识 Camera 有几个重要的基础概念. facing相机的方向,一般后置摄像头和前置摄像头. ...

  9. 08.音频系统:第003课_Linux音频驱动程序:第003节_耳麦拔插事件调用流程分析

    在前面的小节中,我们编写了一个驱动程序,模拟耳机的插拔事件,其可以上报耳机的拔插事件,并且修改了android的源代码,可以根据耳机的拔插事件,在状态栏上现实或者消除耳麦的图标,这节视频我们讲解耳麦插 ...

最新文章

  1. Codeforces Round #275 (Div. 2) c
  2. mybatis 一对多查询_Java自学之mybatis:使用注解方式多对一查询
  3. 淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道
  4. python考核总结_Python阶段总结
  5. flutter - 将数字转换为科学记数法并获得指数 flutter
  6. mysql innodb启动失败_mysql启动失败
  7. linux delete内存不下降_linux内存分配管理
  8. C++ 获取分辨率 获取桌面分辨率
  9. 计算机模拟学,深度学习是让计算机模拟
  10. android核心系列--1,组件生命周期
  11. cocos2d-x2.2.5走四棋儿源代码“开源”
  12. 安卓原生系统_安卓原生系统为什么比MIUI和EMUI等国产系统更流畅
  13. DM6437 GPIO模拟I2C
  14. 那些主流的淘宝客引流方法有哪些?
  15. OTB数据集和VOT数据集融合跟踪算法接口示例
  16. 3DS Max 2014启动报错的解决方案
  17. 本安型CAN中继器在无轨胶轮车中的应用
  18. 正则表达式与绕过案例
  19. 三星内存编码_三星内存编号命名揭秘
  20. 雷达多普勒频率计算公式_第二章 第四节 波的多普勒效应

热门文章

  1. 存储过程系列之存储过程sql数据库调用和程序代码调用
  2. 生成BAPI的ALE接口
  3. routerOS限速限流量
  4. Node.js 提升运行效率
  5. IPXX防护等级中关于防水实验的规定
  6. 【机器人】四元数与旋转矩阵的转换关系
  7. Vue学习笔记之10-组件化开发
  8. html前端开发作品,Web前端开发(HTML5+CSS3)
  9. 泰康应用盒子Android,泰康医疗app下载-泰康医疗 安卓版v1.8.8-PC6安卓网
  10. 如何安装win10与linux双系统,Windows10与CentOS 双系统共存完美教程