android camera HAL

一 编译HAL

修改BoardConfig.mk

device/wolf/smdk6410/BoardConfig.mk

USE_CAMERA_STUB := false

hardware建立Camera HAL目录

hardware/wolf/libcamera

CannedJpeg.h

Ov965xCamera.cpp

Ov965xCamera.h

S3C6410CameraHardware.cpp

S3C6410CameraHareware.h

USBCamera.cpp

USBCamera.h

编写Android.mk文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

    USBCamera.cpp \

    Ov965xCamera.cpp \

S3C6410CameraHardware.cpp

LOCAL_SHARED_LIBRARIES:= \

    libui \

    libutils \

    libbinder \

    liblog \

    libcamera_client

LOCAL_MODULE:= libcamera

LOCAL_MODULE_TAGS := eng

LOCAL_C_INCLUDES += \

                frameworks/base/libs

include $(BUILD_SHARED_LIBRARY)

2 android2.3.4_32bit$ source ./build/envsetup.sh 

3 android2.3.4_32bit$ choosecombo

Build for the simulator or the device?

     1. Device

     2. Simulator

 1

 1

Which product would you like? [smdk6410] 

回车

eng

4 make libcamera编译特定模块

开始编译摄像头模块,动态连接库文件*.so存放在

Install: out/target/product/smdk6410/system/lib/libcamera.so

adb pushlibcamera.so推到目标机/system/lib/

cd D:\software\android-sdk-windows\tools

d:

adb push libcamera.so /system/lib/

目标机上

export ANDROID_LOG_TAGS="CameraHardware:D CameraHardware:E *:S"

logcat -d

问题

拍照

E/AudioService( 1902): Media server died.

解决:在init.c中添加

chmod 0777 /dev/video0

二 CAMERA 系统

Camera系统分成以下几个部分

1)摄像头驱动程序:通常基于linuxvideo for linux视频驱动框架

2Camera硬件抽象层

接口的代码路径:frameworks/base/include/camera/

主要文件为CameraHardwareInterfacd.h,需要各个系统根据自己的情况实现

3)Camera服务部分

代码路径:frameworks/base/include/camera

Camera服务是Android系统中一个单独部分,通过调用Camera硬件抽象层来实现

4Camera的本地框架代码

代码路径:frameworks/base/include/camera

5CameraJNI代码

代码路径:frameworks/base/core/jni/android_hardware_Camera.cpp

提供给Java类的本地支持,也包含了反向调用java传递信息和数据功能

6Camera系统的Java

代码路径:frameworks/base/core/java/android/hardware/Camera.java

CameraJava层次的类为android.hardware.Camera,Java应用程序提供接口

可用于在Java应用程序层构建照相机和扫描类的程序

-----------------------------------------------------------------------

移植的内容

Android系统中,照相机系统的标准化部分是硬件抽象层的接口,因此

针对特定平台Camera系统的移植包括Camera驱动程序和Camera硬件抽象层

Linux系统中,Camera的驱动程序都是用Linux标准的Video for Linux 2(V4L2)

驱动程序,从内核空间到用户空间,主要的数据流和控制类的均由V4L2驱动程序

的框架来定义,在Android系统的实现中,一般也都使用标准的V4L2驱动程序作为

照相机部分的驱动程序

Camera硬件抽象层主要实现取景器,视频录制,拍摄相片三个方面功能。V4L2驱动

程序一般只提供的Video数据的获得,而如何实现视频预览,如何向上层发送数据等

功用,这些都是Camera的硬件抽象层需要负责的方面了。

三 硬件抽象层

1. Camera硬件抽象层

frameworks/base/include/camera/

主要文件为CameraHardwareInterface.h,需要各个系统根据自己的情况实现

2. Camera服务部分

frameworks/base/services/camera/libcameraservice

Camera服务是Andriod系统中一个单独的部分,通过调用camera硬件抽象层

来实现。

3. Camera 的本地框架代码

frameworks/base/libs/camera/

4. Camera的硬件抽象层

是位于V4L2驱动程序和CameraService之间的部分,这是

一个C++的接口类,需要具体的实现者继承这个类,并实现其中的各个纯虚函数。

纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时

再去具体地给出定义。

硬件抽象层的主要的头文件为CameraHardwareInterface.h,定义了C++的接口类

需要根据系统的情况继承实现。

camera.h 这是Camera系统本地对上层的接口

CameraParameters.h定义Camera系统的参数,在本地代码的各个层次中使用。

Camera硬件抽象层的实现通常需要生成动态库libcamera.so

5. CameraHardwareInterface中定义了几种回调函数

typedef void (*notify_callback)(int32_t msgType, //通知回调

                                int32_t ext1,

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值