当前位置:首页 >> 信息与通信 >>

全志A20


A20 Camera 模块开发说明

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -1-

nfi de
2013-03-15 2013 03-

nti
V1.0


al

Revision History
Version v1.0 Date 2013-03-15 Changes compared to previous issue 初建版本

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -2-

nfi de

nti

al

目录
1. 前言--------------------------------------------------------------------------------------------- 4 1.1. 编写目的-------------------------------------------------------------------------------4 1.2. 适用范围-------------------------------------------------------------------------------4 1.3. 相关人员-------------------------------------------------------------------------------4 2. 模块介绍--------------------------------------------------------------------------------------- 5 2.1. 模块功能介绍-------------------------------------------------------------------------5 2.2. 硬件介绍-------------------------------------------------------------------------------5 2.3. 模组选型-------------------------------------------------------------------------------5 2.4. 源码结构介绍-------------------------------------------------------------------------6 2.5. 模块配置介绍-------------------------------------------------------------------------6 2.5.1. camera.cfg----------------------------------------------------------------------7 2.5.2. media_profiles.xml---------------------------------------------------------- 13 3. 模块体系结构描述------------------------------------------------------------------------- 19 4. 模块调试------------------------------------------------------------------------------------- 21 5. Declaration------------------------------------------------------------------------------------ 22

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -3-

nfi de

nti

al

1. 前言
1.1. 编写目的
了解 Android 系统中 Camera 模块在 A20 平台上的开发。

1.2. 适用范围
介绍本模块设计适用 A20 平台。

1.3. 相关人员

TS 人员, Camera 模块研发人员,方案定制人员。

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -4-

nfi de

nti

al

2. 模块介绍
介绍本模块的模块功能,基本配置,目标代码的文件目录组织形式以及相关 的硬件介绍。

2.1. 模块功能介绍 2.2. 硬件介绍

Android Camera 主要用于拍照,录像,视频通话等场景。

CMOS S e nsor

CSI

nfi de
D E
扫描方向 扫描方向 MENU LC D 1 2 8 0x8 0 0 LC D 8 0 0x1 2 8 0

2.3. 模组选型

对物理横屏(如分辨率:1280x800)和物理竖屏(如分辨率:800x1280) , 对摄像头成像角度是有不同的要求的。 横屏与竖屏差别(下面左边是物理横屏, 右边是物理竖屏) :

MENU

Co

摄像头成像方向有如下两种(左边为 0 度, 右边为 90 或 270 度) :

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nti
V E F ile (P ic tur e/V id e o) IS P LC D

al
-5-

扫描方向

扫描方向

正确的配对方式为: 横屏时应选择摄像头成像角度为 0 度的模组。
扫描方向 MENU LC D 8 0 0X4 8 0 扫描方向



MENU

正确选型后,在配置文件 camera.cfg 中将 camera_orientation 配置为摄像头成像 角度,这样系统就可以正确识别摄像头的成像角度。

Co
中。

2.4. 源码结构介绍

Camera HAL 代 码 位 于 Android\device\softwinner\wing-common\hardware\camera

2.5. 模块配置介绍

A20 方案 Android 系统的 Camera 驱动采用模块加载,在 init.sun7i.rc 文件中 配置例如: #csi module A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -6-

nfi de
扫描方向 扫描方向 MENU LC D 4 8 0X8 0 0

竖屏竖屏时应选择摄像头成像角度为 90 度或者 270 度的模组。



介绍本模块源码的基本目录组织形式。

nti
MENU





al

insmod /system/vendor/modules/videobuf-core.ko insmod /system/vendor/modules/videobuf-dma-contig.ko insmod /system/vendor/modules/ov5640.ko insmod /system/vendor/modules/gc0307.ko insmod /system/vendor/modules/sunxi_csi1.ko 如果驱动成功加载, 则会在/dev/目录下面生成节点/dev/video1, 要想 Android 层能使用改设备,需要修改其权限,例如在 ueventd.sun7i.rc 中: /dev/video1 0666 media media 对于非系统开发人员来说不需要关注 Camera HAL 的具体实现, 只要正确的 配置两个配置文件即可.

2.5.1. camera.cfg

Co

为了使得 Camera HAL 的代码能够兼容各种不同的摄像头模组 , 我们将一些 差异性的属性列出来通过 camera.cfg 文件来配置, 在 Camera HAL 代码中通过读 取 camera.cfg 来使用不同的模组. 简要说明一下 camera.cfg 的配置文件: camera.cfg 中定义分号开头为注释; 基本格式为: key = value 几个主要的 key: Key Description key_camera_exif_ma 制造商和型号信息, 将写入照片的 exif 信息中 ke key_camera_exif_mo del number_of_camera 告诉当前系统有几个摄像头, 单摄像头为 1, 双摄像头为 2 camera_id Android 系统中的摄像头 id 号, 如果只有一个摄像头则 id 号为 0; 如果有两个摄像头则后置摄像头 id 为 0, 前置摄 像头 id 为 1 camera_facing 告诉系统这个摄像头是前置还是后置 , Android 系统中对 于前置和后置摄像头在预览时的处理是不一样的, 前置 摄像头预览会所有镜像 use_builtin_isp 对于不带 ISP 的摄像头模组(将启用我们 IC 的 ISP)为 1, 否则为 0 camera_orientation 摄像头成像方向, 通常在物理横屏为 0, 物理竖屏上为 90 或 270

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

nti

al
-7-

camera_device

剩下的几项基本上都是基于模式为: used_xxx: 为 0 表示系统不支持, 为 1 表示系统支持; 如果系统支持, 那么: key_support_xxx 后的值表明系统所支持的模式; key_ default_xxx 后的值表明默认的模式; 在 camera.cfg 中定义的 used_xxx 中有两项 used_preview_size 和 used_picture_size 是必须配置的, 其它都是可选项. 典型的 camera.cfg 配置文件如下: ;------------------------------------------------------------------------------; 用于 camera 的配置 ; ; 采用格式: ; key = key_value ; 注意: 每个 key 需要顶格写; ; key_value 紧跟着 key 后面的等号后面, 位于同一行中; ; key_value 限制大小为 256 字节以内; ; ;-------------------------------------------------------------------------------

Co

;------------------------------------------------------------------------------; exif information of "make" and "model" ;------------------------------------------------------------------------------key_camera_exif_make = MAKE_EVB key_camera_exif_model = MODEL_EVB ;------------------------------------------------------------------------------; 1 for single camera, 2 for double camera ;------------------------------------------------------------------------------number_of_camera = 2

;------------------------------------------------------------------------------A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

nti

al
-8-

device_id

当前摄像头驱动的设备结点名称, 用于打开正确的摄像 头. 如果两个摄像头分别接到不同的 CSI 上时, 那么两 个摄像头的设备结点名称是不同的; 如果两个设想共用 一个 CSI 接口, 那么这两个摄像头的设备结点相同, 此 时需要通过下面的 device_id 来区分不同的摄像头 device_id 是对于两个摄像头共用一个 CSI 接口时用于打 开不同的摄像头用的, device_id 为 0 是默认打开的摄像 头; device_id 为 1 则需要打开设备结点时切换到该摄像 头

; CAMERA_FACING_BACK ; ov5640 ;------------------------------------------------------------------------------camera_id = 0

;------------------------------------------------------------------------------; 1 for camera without isp(using built-in isp of Axx) ; 0 for camera with isp ;------------------------------------------------------------------------------use_builtin_isp = 0

;------------------------------------------------------------------------------; camera orientation (0, 90, 180, 270) ;------------------------------------------------------------------------------camera_orientation = 0 ;------------------------------------------------------------------------------; driver device name ;------------------------------------------------------------------------------camera_device = /dev/video1 ;------------------------------------------------------------------------------; device id ; for two camera devices with one CSI ;------------------------------------------------------------------------------device_id = 0 used_preview_size = 1 key_support_preview_size = 1280x720,640x480 key_default_preview_size = 1280x720 used_picture_size = 1 key_support_picture_size = 2592x1936,1600x1200,1280x1024 key_default_picture_size = 2592x1936 used_flash_mode = 0
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. -9-

Co

nfi de

nti

al

;------------------------------------------------------------------------------; 1 for CAMERA_FACING_FRONT ; 0 for CAMERA_FACING_BACK ;------------------------------------------------------------------------------camera_facing = 0

key_support_flash_mode = on,off,auto key_default_flash_mode = on used_color_effect=1 key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 25 key_default_frame_rate = 25

used_focus_mode = 1 key_support_focus_mode = auto,infinity,macro,fixed,continuous-video,continuous-picture ; 若支持持续对焦需要加上后面的 continuous-video,continuous-picture, 不支持则 将这两个去掉 key_default_focus_mode = auto used_scene_mode = 0 key_support_scene_mode = auto,portrait,landscape,night,night-portrait,theatre,beach,snow,sunset,steadyphoto,fir eworks,sports,party,candlelight,barcode key_default_scene_mode = auto used_white_balance = 1 key_support_white_balance auto,incandescent,fluorescent,warm-fluorescent,daylight,cloudy-daylight key_default_white_balance = auto used_exposure_compensation = 1 key_max_exposure_compensation = 3 key_min_exposure_compensation = -3 key_step_exposure_compensation = 1 key_default_exposure_compensation = 0

nfi de

nti

Co

;------------------------------------------------------------------------------; CAMERA_FACING_FRONT ; gc2035 ;------------------------------------------------------------------------------camera_id = 1 ;-------------------------------------------------------------------------------

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

al
=
- 10 -

; 1 for camera without isp(using built-in isp of Axx) ; 0 for camera with isp ;------------------------------------------------------------------------------use_builtin_isp = 0

;------------------------------------------------------------------------------; camera orientation (0, 90, 180, 270) ;------------------------------------------------------------------------------camera_orientation = 0

;------------------------------------------------------------------------------; device id ; for two camera devices with one CSI ;------------------------------------------------------------------------------device_id = 1 used_preview_size = 1 key_support_preview_size = 640x480 key_default_preview_size = 640x480

Co

used_picture_size = 1 key_support_picture_size = 1600x1200,640x480 key_default_picture_size = 1600x1200 used_flash_mode = 0 key_support_flash_mode = on,off,auto key_default_flash_mode = on used_color_effect= 0 key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

;------------------------------------------------------------------------------; driver device name ;------------------------------------------------------------------------------camera_device = /dev/video1

nti
- 11 -

al

;------------------------------------------------------------------------------; 1 for CAMERA_FACING_FRONT ; 0 for CAMERA_FACING_BACK ;------------------------------------------------------------------------------camera_facing = 1

used_frame_rate = 1 key_support_frame_rate = 20 key_default_frame_rate = 20

used_exposure_compensation = 0 key_max_exposure_compensation = 3 key_min_exposure_compensation = -3 key_step_exposure_compensation = 1 key_default_exposure_compensation = 0

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 12 -

nfi de

used_white_balance = 0 key_support_white_balance auto,incandescent,fluorescent,warm-fluorescent,daylight,cloudy-daylight key_default_white_balance = auto

nti

used_scene_mode = 0 key_support_scene_mode = auto,portrait,landscape,night,night-portrait,theatre,beach,snow,sunset,steadyphoto,fir eworks,sports,party,candlelight,barcode key_default_scene_mode = auto

al
=

used_focus_mode = 0 key_support_focus_mode = auto,infinity,macro,fixed key_default_focus_mode = auto

2.5.2. media_profiles.xml
media_profiles.xml 用于配置录像参数. 拿到一个模板后, 只需要修改几处地方即可. 典型的对于双摄像头如下分了两段分别配置后置摄像头 cameraId="0"和前置摄像头 cameraId="1". 这里需要根据实际摄像头参数修改下面例子中高亮标注的地方. 关键字 EncoderProfile quality 含义 录 像 质 量 , 在 Android2.3 中 必 须 要 配 置 两 项 ”low” 和 ”high”; Android4.0 中 默 认 支 持 ”1080p”, ”720p”, “480p”, 我们为了兼容以前的配置, 扩展了支持”low” 和”high”, 此外 Android4.0 中支持了延时录制模式, 其 关键字分别是在正常模式前加上” timelapse”, 例如” timelapse480p”等 编码格式, 这里为”h264”即可 通常说的视频文件的码率 , 码率越高, 录制文件画面 (视频)越清晰, 音质(音频)越高, 但占用磁盘空间越大 录像文件的分辨率, 分别对应宽和高 视频文件的帧率, 实际的帧率需要与摄像头采集帧率 一致 声音的采样率, 采样率越高, 音质越好; 反之亦然 声音的通道数, 通常说的单声道或双声道 是指拍照的质量, 分别对于及精细, 精细和一般

width, height frameRate

sampleRate channels ImageEncoding quality

对于 Android4.1 典型配置如下(截取部分): <CamcorderProfiles cameraId="0"> <EncoderProfile quality="1080p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="15000000" width="1920" height="1080" frameRate="30" /> <Audio codec="aac" bitRate="128000" sampleRate="44100" channels="1" /> </EncoderProfile> <EncoderProfile quality="720p" fileFormat="mp4" duration="30"> A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 13 -

Co

nfi de

Video codec bitRate

nti

al

Co

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

<EncoderProfile quality="480p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="1500000" width="640" height="480" frameRate="25" /> <Audio codec="aac" bitRate="12200" sampleRate="8000" channels="1" /> </EncoderProfile>

<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="15000000" width="1920" height="1080" frameRate="30" /> <Audio codec="aac" bitRate="128000" sampleRate="44100" channels="1" /> </EncoderProfile> <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="3000000" width="1280" height="720" frameRate="30" /> <!-- audio setting is ignored -->
- 14 -

nti

al

<Video codec="h264" bitRate="5000000" width="1280" height="720" frameRate="30" /> <Audio codec="aac" bitRate="128000" sampleRate="44100" channels="1" /> </EncoderProfile>

<Audio codec="aac" bitRate="128000" sampleRate="44100" channels="1" /> </EncoderProfile> <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="1500000" width="640" height="480" frameRate="25" /> <Audio codec="aac" bitRate="12200" sampleRate="8000" channels="1" /> </EncoderProfile>

<Camera previewFrameRate="0" /> </CamcorderProfiles>

<CamcorderProfiles cameraId="1"> <EncoderProfile quality="480p" fileFormat="mp4" duration="30"> <Video codec="h264" bitRate="1500000" width="640" height="480" frameRate="25" /> <Audio codec="aac" bitRate="12200" sampleRate="8000" channels="1" /> </EncoderProfile> <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30"> <Video codec="h264"

Co

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de
<ImageEncoding quality="90" /> <ImageEncoding quality="80" /> <ImageEncoding quality="70" /> <ImageDecoding memCap="20000000" />

nti

al
- 15 -

<ImageEncoding quality="90" /> <ImageEncoding quality="80" /> <ImageEncoding quality="70" /> <ImageDecoding memCap="20000000" /> <Camera previewFrameRate="0" /> </CamcorderProfiles>

<EncoderOutputFileFormat name="mp4" /> <!--

--> <VideoEncoderCap name="h264" enabled="true" minBitRate="64000" maxBitRate="3000000" minFrameWidth="320" maxFrameWidth="1600" minFrameHeight="240" maxFrameHeight="1200" minFrameRate="1" maxFrameRate="30" />

Co

<AudioEncoderCap name="aac" enabled="true" minBitRate="12200" maxBitRate="51200" minSampleRate="8000" maxSampleRate="44100" minChannels="1" maxChannels="1" /> <AudioEncoderCap name="amrwb" enabled="true" minBitRate="6600" maxBitRate="23050" minSampleRate="16000" maxSampleRate="16000" minChannels="1" maxChannels="1" /> <AudioEncoderCap name="amrnb" enabled="true"

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

If a codec is not enabled, it is invisible to the applications In other words, the applications won't be able to use the codec or query the capabilities of the codec at all if it is disabled

nti
- 16 -

al

bitRate="1500000" width="640" height="480" frameRate="25" /> <Audio codec="aac" bitRate="12200" sampleRate="8000" channels="1" /> </EncoderProfile>

minBitRate="5525" maxBitRate="12200" minSampleRate="8000" maxSampleRate="8000" minChannels="1" maxChannels="1" /> <!-FIXME: We do not check decoder capabilities at present At present, we only check whether windows media is visible for TEST applications. For other applications, we do not perform any checks at all. --> <VideoDecoderCap name="wmv" enabled="true"/> <AudioDecoderCap name="wma" enabled="true"/> <!--

--> <VideoEditorCap maxInputFrameWidth="1920" maxInputFrameHeight="1080" maxOutputFrameWidth="1920" maxOutputFrameHeight="1080" maxPrefetchYUVFrames="10"/> <!-The VideoEditor Export codec profile and level values correspond to the values in OMX_Video.h. E.g. for h264, profile value 1 means OMX_VIDEO_AVCProfileBaseline and level 4096 means OMX_VIDEO_AVCLevel41. Please note that the values are in decimal. These values are for video encoder. --> <!-Codec = h.264, Baseline profile, level 4.1 --> <ExportVideoProfile name="h264" profile= "1" level="4096"/> <!-Codec = h.263, Baseline profile, level 0 -->
- 17 -

Co

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

nfi de

The VideoEditor Capability configuration: - maxInputFrameWidth: maximum video width of imported video clip. - maxInputFrameHeight: maximum video height of imported video clip. - maxOutputFrameWidth: maximum video width of exported video clip. - maxOutputFrameHeight: maximum video height of exported video clip. - maxPrefetchYUVFrames: maximum prefetch YUV frames for encoder, used to limit the amount of memory for prefetched YUV frames. For this platform, it allows maximum 30MB(3MB per 1080p frame x 10 frames) memory.

nti

al

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 18 -

nfi de

nti

al

<ExportVideoProfile name="h263" profile= "1" level="1"/> <!-Codec = mpeg4, Simple profile, level 5 --> <ExportVideoProfile name="m4v" profile= "1" level="128"/> </MediaSettings>

3. 模块体系结构描述
JA V A A PP

Ja v a

Camera API

Android Framework

Native JNI



据Lis tener 决 定callb ack 对 象

C a m e ra
数 据 采 集 线 程, 采 集 的 视 频 帧 两 个 去 向: 1. 调 用 显 示 接 口 进 行 预 览 2. 通 过 回 调 函 数 传 给 上 层
Bin d er

CameraClient

CameraService

P re v ie w

Camera HAL Take Picture

nti
CameraListener MediaRecorder
Bin d er

MediaPlayerService

Linux

图 1.Camera 模块的基本结构 对于系统开发人员来说, 只需要实现上图中右下角的部分, 我们称为 Camera HAL 层. 在 Android 中, Camera HAL 层的框图如下:
hardw are
用 于 管 理 所 有 的 H A L层 模 块

nfi de
V4L2 Driv e r
+h w_g e t_m odule ( ) +h w_g e t_m odule _b y_c la ss( ) +l o a d( )
原 型:i n t ( *c l o s e) (struct hw_d e v i c e_t* d e v i c e);

h w_ m od u le _t w_ le_

h w_ d e vic e_t w_ de e_

-h w_m odule _t* m odule +c lo se( )

-h w_m odule _m e thods _t* m e thods ; -const char *na m e ; -const char *i d;

Co
O p s在h w_m o d u l e_t的o p e n中 赋 值, 所 有 接 口 在CameraHardware中 实 现

c am e r a_ d e vic e_t a_ de e_

c am e r a_ m od u le _t a_ le_ -h w_m odule _t c om m on ; +g e t _num be r _o f_cameras( ) +g e t _camera_i n f o( )
S t e p2: 通 获 过m o d u l e->m e t h o d s->o p e n( ) 取h w_d e v i c e_t的 对 象

c am e r a_d e vic e_o p s a_de e_

-h w_de vic e_t c om m on ; -camera_de vic e_o p s_t *o p s; -void *p r i v;

S t e p3: 通

过m D e v i c e ->o p s来 调 用H A L的 接 口

HALCameraFactory

-CameraHardware* * mHardwareCameras; -h w_m odule _m e thods _t mCameraModuleMethods ; +int ge t_num be r _o f_cameras( ) +int ge t_camera_i n f o( ) +int de vic e_o p e n( )

CameraHardware

-static camera_de vic e_o p s_t mDeviceOps;

p r e vie w_s t r e a m _o p s w_st m_

c am e r a_p r e vie w_w in d ow a_ w_ in d ow -p r e v ie w_s tr e a m_o p s n w; -void *use r;

A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved.

al
MediaRecorder API Native JNI MediaRecorder Clie nt C e d a r X Recorder HW Encoder
原 型:i n t ( *o p e n) (const struct hw_m o d u l e_t* m o d u l e, c o n s t c h a r* i d, struct hw_d e v i c e_t* * d e v i c e); 可 见 从 这 里 可 以 获 取 h w_d e v i c e_t的 对 象。

h w_m od u le _m ethods _t w_ le_ ethods_ +o p e n( )
S t e p1: onFirstRef中 通 过h w_g e t_m o d u l e 获 取c a m e r a_m o d u l e_t对 象

CameraService -camera_m odule _t *m M odule ; +onFirstRef( ) +connect( )

CameraHardwareInterface -camera_de vic e_t *mD evice; -camera_p r e v ie w_window mHalPreviewWindow ; -s p<A N ativeW indow > mPreview W indow; +sta tus_t initialize(h w_m odule _t *m odule ) ( )

CameraService : :::C lient CameraService: C -s p<CameraHardwareInterface> mHardware; -s p<CameraService> mCameraService; -s p<ICameraClient > mCameraClient;

- 19 -

c am e r a_ d e vic e_ t a_ e_ h w_ m odule_ m ethods_ t w_ odule_ methods ethods_ +o p e n( )
HALCameraFactory 的构造函数中实例化 CameraHardware 象 对 new CameraHardwareDevice

-h w_de vic e_t c om m on; -camera_de vic e_o p s_t *o p s; -void *p r i v;

HALCameraFactory -CameraHardware** mHardwareCameras; -h w_m odule _m e thods_t mCameraModuleMethods ; +int get_num be r_o f_cameras( ) +int get_camera_i n f o( ) +int device _o p e n( )
O p e n操 作

获 取 了h w_d e v i c e_t的 接 口, *d e v i c e = &c o m m o n;

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 20 -

nfi de
mHardwareCameras[c a m e r a_i d]->connectCamera(d e v i c e);

nti
CameraHardware -camera_de vic e_o p s_t mDeviceOps; -CameraParameters mParameters; -CallbackNotifier mCallbackNotifier; -PreviewWindow mPreviewWindow ; -V4L2CameraDevice * m V4L2CameraDevice; V4L2CameraDevice -CameraHardware* mCameraH A L; -Preview W indow* mPreview W indow -CallbackNotifier* mCallbackNotifier;

al
CallbackNotifier P review W indow -p r e v ie w_s t r e a m_o p s* mPreview W indow;

CameraService 通过 hw_get_module 获取 camera_module_t 对象; CameraService 中创建 CameraHardwareInterface 实例; CameraHardwareInterface 对象调用 camera_module_t 的接口 open, 获取 hw_device_t 对象, 赋值所有的 camera_device_ops_t 中的函数指针; CameraHardwareInterface 对象赋值用于预览的函数指针; Android4.1 中 Camera HAL 实现的结构图如下:

4. 模块调试
查看驱动是否加载成功 打开摄像头时提示“图库异常” ,首先查看 logcat 的出错信息,如果提示无法连接 Camera I/CameraService(14364): Opening camera 0 E/V4L2CameraDevice(14364): ERROR opening /dev/video1: No such file or directory E/HALCameraFactory(14364): cameraDeviceOpen: Unable to connect camera E/CameraService(14364): Could not open camera 0: -22 I/CameraService(14364): Destroying camera 0 E/CameraHolder(30100): fail to connect Camera 这是因为 CSI 驱动设备节点没有生成导致,检查驱动是否加载成功。 可以通过 adb 工具进行查看,一些简单的 adb 的命令如下所示: 1) 、使用 lsmod 命令查看驱动是否加载 2) 在 adb shell 中使用 cat /proc/kmsg 命令, 、 或者是使用串口查看内核的打印信息, 查看不能正常加载的原因,一般情况下驱动加载不成功的原因有:一是读取 的 sys_config1.fex 文件中的配置信息与加载的驱动不匹配,二是 probe 函数遇到某些错误 没能正确的完成 probe 的时候返回,三是驱动与所使用的固件不匹配。 ?

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 21 -

nfi de

nti

al

5. Declaration

Co
A20 Camera 模块开发说明 Copyright ? 2013Allwinner Technology. All Rights Reserved. - 22 -

nfi de

nti

The information furnished by Allwinner is believed to be accurate and reliable. Allwinner reserves the right to make changes in circuit design and/or specifications at any time without notice. Allwinner does not assume any responsibility and liability for its use. Nor for any infringements of patents or other rights of the third parties which may result from its use. No license is granted by implication or otherwise under any patent or patent rights of Allwinner. This datasheet neither states nor implies warranty of any kind, including fitness for any particular application.

al

This(A20 Camera 模块开发说明) is the original work and copyrighted property of Allwinner Technology (“Allwinner”). Reproduction in whole or in part must obtain the written approval of Allwinner and give clear acknowledgement to the copyright owner.


相关文章:
全志系列播放器固件详细烧写教程_图文
全志系列播放器固件烧写教程在烧写固件前, 我们需要在电脑上安装一个烧写固件的...以下是单核 A10S 双核 A20S 四核 A31S 的图解刷机方法 固件烧写前的准备: ...
开博尔全志系列刷机教程
开博尔全志系列刷机教程_计算机硬件及网络_IT/计算机_专业资料。开博尔 A31S/A20 机型刷机教程此教程适用机型大致如下: A31S:C3 四核,Q5,Q2,K610I 四核,D1,K10 ...
全志A31开发板编译环境搭建指导书_图文
全志A31开发板编译环境搭建指导书_计算机软件及应用_IT/计算机_专业资料。介绍在...全志A20_Script和GPIO开... 48页 1下载券 全志A10设计参考 17页 免费 ©...
全志公司对I2C的讲解
全志公司对I2C的讲解_计算机软件及应用_IT/计算机_专业资料。1. 几个基本概念 ...全志A20平台I2C设备调试... 13页 1下载券 全志A31开发板编译环境搭... 68...
A20安卓网络广告机解码板功能介绍_图文
3、外观图样 2 4、硬件指标主要硬件指标 CPU 内存 内置存储器 解码分辨率 操作系统 播放模式 网络支持 视频播放 图片格式 USB2.0 接口 全志 A20 , 双核 1GHz ...
3Q-A20多媒体网络播放-液晶驱动一体板_技术规格书_V1.0...
2. 高清晰度 产品概述 3Q-A20 是一款基于全志 A20 主芯片的多媒体网络播放-液晶驱动一体板。其主控 IC 具有强大的音 视频处理能力,支持 1080P 全高清解码,...
全志PC刷机汇总2015.01.29 (1)(1)_图文
全志刷机电脑刷机教程一、全志 PC 端刷机 (一)刷机准备 1.准备好公对公刷机...5.说明: ?PhoenixSuit.exe 工具支持 A31s、A20、A10s 等全部芯片型号刷机。 ?...
认识ARM 28NM、40NM、55NM不同CPU制程工艺
代表产品:全志 A20、A31、 A31S; 海思 K3V2 随着 40nm 制程的成熟及比 28nm 更具成本优势,因此成为了丌少吃丌起“28nm” 葡萄的的一些 ARM 厂商的丌错选择...
Raspberry pi 2 与Banana pro对比
树莓派 2Model B 与 乐美客 Banana Pro 对比树莓派 2 Model B 系统级芯片 博通 BCM2836 Banana Pro 全志 A20 对比 CPU 900MHz 四核 ARMA7 ARM? 1GHz ...
车机芯片及系统
6、全志 A10(单核)A20(双核)A80(8 核) 7、瑞芯微 RK-PX2-3066 瑞芯微电子有限公司(Fuzhou Rockchips Electronics CO., Ltd)是国内独资的专业集成 电路设计...
更多相关标签:
a20 | 全志 | 全志a20通用刷机包 | 全志a20固件 | 全志双核a20 | 全志a33 | 全志a10 | 全志a20行车记录仪 |