Android Camera相关code分布如下:

1、Camera上层app的架构就不分析了,大家应该都很清楚。

2、以下是Android多媒体常用c/s结构中的client部分

frameworks/base/core/java/android/hardware/Camera.java, android.hardware.Camera

frameworks/base/core/jni/android_hardware_Camera.cpp, 生成库libandroid_runtime.so

frameworks/base/libs/camera,生成库libcamera_client.so;实现了Camera类,该类继承了BnCameraClient,DeathRecipient。

以下是server部分:

frameworks/base/camera/libcameraservice,生成libcameraservice.so

实现了CameraService类,该类继承了BnCameraService(ICameraService),并实现了instantiate(),其内部包含一内部类class Client : public BnCamera ,ICamera类的实现主要靠BnCamera. openCameraHardware()在该类中调用。

3、以下是Tegra2平台特有的部分:

hardware/tegra/hal/libnvomxcamera,libcamera.so,实现CameraHardwareInterface接口,openCameraHardware()在该库中实现。

hardware/tegra/core/drivers/openmax/ilclient,libnvomxilclient.so

该库动态加载libnvomx.so库,并给包含9个OMX core 函数的结构体NvxFramework赋值,通过这种方法绕过了PVMF。PMVF对于OMX来说其实也就是一个omx client.

hardware/tegra/core/drivers/openmax/il,libnvomx.so:OMX core 库

libnvodm_imager.so:odm image 的hal库,这部分默认情况下NV只提供了binary,在full build时会将此库copy到system目录下,继而集成到system.img中去。

libnvodm_query.so:odm 的查询库,对GPIO,供电,i2c等其他相关硬件配置在本库完成。

对于一个手机支持两个或多个camera的问题,个人看法是上层告诉底层使用哪一个camera,然后每次OMX会重新构建OMX Graph,并在最后enable port的时候使用不同的camera硬件。上层处理基本保持一致。

在android tegra2中添加一个camera

Tegra芯片目前还没有和android系统很好地整合,毕竟nvidia做作支持android的决定时间也不算太长,听说已经在做了,会在android3.0上整合好吧,这个会不会实现只是猜测。

在这种情况下,camera的驱动当然也就不会放在kernel下了,目前她被放在hardware/tegra/odm/product/***/下,要具体地添加一个camera及其驱动,主要步骤如下:

1)odm_kit/query/include/nvodm_query_discovery_imager.h

定义一个标识序列,例如

#define QQ1234_GUID NV_ODM_GUID('s','_','Q','Q','1','2','3','4')

2)odm_kit/query/subboards/nvodm_query_discovery_e***_addresses.h

配置camera的硬件连接参数

#define QQ1234_PINS (NVODM_CAMERA_DEVICE_IS_DEFAULT)

static const NvOdmIoAddress s_ffaImagerQQ1234Addresses[] =

{

I2C配置;

Reset GPIO 配置;

powerdown GPIO 配置;

Camera VDD 配置;

VCSI 配置;

Video input 配置;

external Clock (CSUS)配置;

};

3)odm_kit/query/subboards/nvodm_query_discovery_e***_peripherals.h

camera设备入口地址同GUID关联

// QQ1234

{

QQ1234_GUID,

s_ffaImagerQQ1234Addresses,

NV_ARRAY_SIZE(s_ffaImagerQQ1234Addresses),

NvOdmPeripheralClass_Imager

},

4)odm_kit/adaptations/imager/Android.mk

LOCAL_SRC_FILES += sensor_yuv_qq1234.c

5)odm_kit/adaptations/imager/imager_hal.c

添加Hal层会枚举的camera类型

#include "sensor_yuv_qq1234.h"

DeviceHalTable g_SensorHalTable[] ={

....

{QQ1234_GUID, SensorYuvQQ1234_GetHal},

....

};

5)odm_kit/adaptations/imager/sensor_yuv_qq1234.c

odm_kit/adaptations/imager/sensor_yuv_qq1234.h

NvBool SensorYuvxQQ1234_GetHal(NvOdmImagerHandle hImager);

这是对camera设备的配置和功能的具体实现的文件。硬件校准之类的工作主要就是修改sensor_yuv_qq1234.c

   1:  NvBool SensorYuvQQ1234_GetHal(NvOdmImagerHandle hImager)
   2:   
   3:  {
   4:   
   5:  if (!hImager || !hImager->pSensor)
   6:   
   7:  return NV_FALSE;
   8:   
   9:  hImager->pSensor->pfnOpen = SensorYuv_Open;
  10:   
  11:  hImager->pSensor->pfnClose = SensorYuv_Close;
  12:   
  13:  hImager->pSensor->pfnGetCapabilities = SensorYuv_GetCapabilities;
  14:   
  15:  hImager->pSensor->pfnListModes = SensorYuv_ListModes;
  16:   
  17:  hImager->pSensor->pfnSetMode = SensorYuv_SetMode;
  18:   
  19:  hImager->pSensor->pfnSetPowerLevel = SensorYuv_SetPowerLevel;
  20:   
  21:  hImager->pSensor->pfnGetPowerLevel = SensorYuv_GetPowerLevel;
  22:   
  23:  hImager->pSensor->pfnSetParameter = SensorYuv_SetParameter;
  24:   
  25:  hImager->pSensor->pfnGetParameter = SensorYuv_GetParameter;
  26:   
  27:  return NV_TRUE;
  28:   
  29:  }

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

转自:http://qiuzhenqing.blog.edu.cn/2010/581021.html

http://qiuzhenqing.blog.edu.cn/2010/591863.html

Android NVidia Tegra2平台Camera架构浅析相关推荐

  1. Android Camera架构浅析

    原址 1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转 ...

  2. android camera工程师,浅析Android Camera架构

    本博文是基于Android 4.4讲解 1.application 层: 当我们Android工程师想打开camera时通常直接调用Camera.java中的  Camer.open(cameraId ...

  3. android平台Camera采集数据ffmpeg进行编码探究

      在PC机上,Camera采集数据利用ffmpeg进行编码往往没有任何问题,但是到了android平台或多或少会出现一系列问题,下面就针对这些问题总结一下. 1.在PC和android平台最大的差别 ...

  4. Android Camera 架构

    和你一起终身学习,这里是程序员 Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一.Android Camera整体架构简述 二. Came ...

  5. Android源码之Camera系统架构

    2019独角兽企业重金招聘Python工程师标准>>> https://blog.csdn.net/ljsbuct/article/details/7094670 https://w ...

  6. Camera服务之--架构浅析

    一.应用层 Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个Camera 应用APK 包.代码在/android/packages/apps/Camera 下.主要对 ...

  7. android camera 实时滤镜,【Camera】Android平台Camera实时滤镜实现方法

    Android+JNI+OpenGL开发自己的美图秀秀 2016-01-18 16:39 阅读(5116) 评论(19) Android平台Camera实时滤镜实现方法探讨(十一)--实时美颜滤镜 2 ...

  8. Android应用内社区SDK技术架构浅析

    Android应用内社区SDK技术架构浅析 图1为雪球财经自选界面,图2是雪球财经App内的社区,也就是动态页面. 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社 ...

  9. android拷机工具,Android8.0平台Camera monkey拷机卡死异常解决方案

    android8.0平台camera monkey拷机卡死异常 最近在处理一个camera monkey拷机卡死的问题,卡死在停止录像的画面. monkey测试命令 monkey -p com.and ...

  10. Android Clean 架构浅析

    该原创文章首发于微信公众号"字节流动" Android 常用的架构主要有 MVC,MVP,MVVM 以及 Clean .以上架构设计模式没有绝对的优劣之分,关键要看具体的应用场景. ...

最新文章

  1. 脑电分析系列[MNE-Python-19]| 可视化Evoked数据
  2. java如何理解继承性_理解 Java 的三大特性之继承
  3. jaxb int convert to integer
  4. 安装翻译_【现象】面对日益增多的外国人 日本安装远程翻译设施
  5. WPF 创建无边框的圆角窗口
  6. 逻辑分析推理(戴帽子问题)博弈
  7. Zookeeper的选举机制详解
  8. layui totalRow 多层嵌套json_自定义 Behavior,实现嵌套滑动、平滑切换周月视图的日历...
  9. AE快速动画脚本MotionMonkey
  10. 东芝移动硬盘拆解图_拆解报告:小米USB 3.0分线器XMFXQ01QM
  11. STC 51单片机仿真总结
  12. caffe框架学习(layer)
  13. 中国联通智慧客服项目31省集约收官,百度智能客服服务全国最多用户
  14. Google Play应用商店开发者账号注册教程
  15. 常见的异常类有哪些?
  16. (三)单细胞数据分析——细胞亚群的表型特征刻画
  17. 一心多用多线程-线程的生命周期
  18. Grubbs检验离群值——循环算法求出多个离群值
  19. 网络课笔记整理——物理层
  20. 嵌入式下的Hello World——点亮流水灯(STM32cubemx)

热门文章

  1. wuauclt.exe进程和wuauclt病毒的查杀清理方法
  2. 【新年新气象_新年CSDN第一篇】斯特林数简介及应用
  3. python 生成文字图案_Python|利用字母可以组成一些美丽的图形
  4. 一些wincap函数说明
  5. python3 print和format函数
  6. php phalapi,[6.3]-SDK包(PHP版) | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
  7. Forth 常见问题解答
  8. 神奇英语语法系列(二)——名词性从句
  9. 电脑找回,怎么找回电脑上删除的文件_怎么找回电脑删除的文件-win7之家
  10. 文化财经SAR指标计算(一)