|
|
MTK6577+Android之Camera驱动7 u7 h7 t3 P9 X3 X p1 ]
3 r+ v8 O6 t' p8 }3 S
& J# I% t; A X& YMTK6577+Android之Camera驱动 7 ]/ y' w5 s* R4 N( E
# |/ f+ }; f; H1 z3 [' U / Z) d/ o0 S& ]& B2 ~( k& w
图1 ) \( N+ W4 z) \2 E
1. Camera拍照相关概念
) X, W1 Q' v% M& T. A 7 J, Z! ~6 E$ Z. |1 V+ n
1.1 ISP
9 J. x1 i) K4 O9 _
" c3 A- X1 X1 n0 ?! R! jisp——(Image Signal Processor)——影视处理
5 b* a, i* B* \. i( K+ l. d , ~$ Y: H, ?! Y% B1 m
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上
' B& f% Z ]4 W/ F0 m( o1 s . y0 j4 B) f+ U4 J
1.2 720p
5 A- U* X' }; B: V720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。9 y' M; j- z/ ?" _, Q# J
; i7 H+ b/ H# O- Q分辨率为1280×720p/60Hz,行频为45kHz
9 q* j( `3 ?/ S7 ?( O6 w 6 }) A. R8 x6 {9 d; S
. d8 ~6 C# G& O" C# l$ e- p
2. MTK6577Camera控制器部分1 _, J- ?1 L3 n& y' f4 J6 D4 C, }
* L/ {# A8 y6 J, l6 l3 a( a* |
2.1 camera控制器概述
' V7 ?# d9 h* }0 V3 g' eMT6577 camera可接受RAM和SOC传感器处理之后的图像数据(sensor image data),并输出YUV数据给MDP(什么的简称)。Camera控制器可同时连接2个并行SOC传感器,它提供像素缺陷补偿(bad pixel compensation)、去马赛克(demosaic)、边缘曾强(edge enhancement)、标准色自适应(preference color adaptation)、空间和暂时噪声消除(spatial and temporal noise reduction)这些特征,用于图像处理。
o4 d/ Y, D. { X 6 k# C$ g5 B9 U$ T
2.2 camera特征8 j1 B8 d0 P4 S0 ]2 y
6 L* i! X1 W) q6 o+ q& w$ [6 S
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。
, a1 g1 _. D/ v3 w) B & g$ _9 q( b( u, p0 R& K* r; q
支持的特征如下:
- T- c9 R9 ?7 w. d1 Y: F- L(1) 抓图分辨率达8M像素(image capture resolution)。
' d: V, y; H" G/ j9 O! S; x(2) 录像分辨率达720p(video recording resolution)。
1 C; M: ]* J7 I3 M$ U(3) 原始图像数据转储帧率8M@15(raw dump frame rate)。9 S" U9 Z( ^6 {, T' Z* P
(4) 曝光抓图率8M@7(burst capture rate)。
' X1 s* p8 K+ x+ u6 y, v7 ^$ k(5) 图像处理
& }& k0 r; K2 [ i( G低像素补偿(poor pix compensation)、镜头阴影补偿(lens shading compensation)、去马赛克(demosaic)、色彩削波(color clipping)、局部对比度增强(local contrast enhancement)、伽玛校正(gamma correction)、边缘曾强(edge enhancement)、噪声消除(noise reduction)、标准色自适应(preference color adaptation)、空间和暂时噪声消除(spatial and temporal noise reduction)。: M) N4 C7 s/ m0 @
2 G* v* g! h5 k+ s- I" `" f
(6) 3A统计和校正(statistics and correction). B( V" e1 y2 O1 r+ Z* B5 T& S D" z) G
(7) 闪烁检测(flicker detection)。
* Q# ?2 k, a, y9 c9 K% s ; U$ `" W) {+ r0 M. u5 O# R8 K$ x5 k
2.3 camera框图
: h! O8 H E1 W# ~- P# L
$ `6 b6 u* U) H" S! Z8 S
3 ~% ~# ~ H" N S! Z( N图2 TG只配合主图像传感器(master type image sensor),也就是说主图像传感器应发送垂直和水平信号给TG。TG通过内部自动同步 (internal auto synchronization)或外部像素时钟同步来提供传感器所需要的数据时钟和接收传感器Bayer模式原始数据(Bayer pattern raw data)。TG的主要目的是为主图像传感器创建数据时钟和接收垂直/水平同步信号与sensor数据,然后产生Bayer数据的捕获区域(grabbed area of Bayer data)或是YUV422/RGB565数据给镜头/传感器补偿(lens/sensor compensation)单元。* v3 i! g0 y* m: b& G) a! u+ }
! I" Z @0 ^0 E; t% i
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。6 _0 R; }: q* B7 J
" a5 s0 e- n% @/ _% @$ }+ c色彩处理单元接受来之镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据或是YUV422/RGB565数据。ISP的输出的是很容易被压缩引擎(compress engine,JPEG编码器和MPEG4编码器)编码的YCbCr888数据格式,它是其他数据格式转化的基本数据域(比如R/G/B domain)(it can be the basic data domain of otherdata format translation such as the R/G/B domain)。ISP是流水线式(pipelined),在处理阶段ISP硬件能够为后面的AE/AF/AWB计算提取有意义的信息,这些信息被临时保存在ISP寄存器或是内存中,并且能够被MCU读取出来。+ V1 ?, \: P" d& u
7 H% O- B- B0 @7 h. H' ] j下面给出一些性能参数:
9 c6 e' z1 k) w- O: m ! f# b2 g9 c! w! n% r
" S f! U, Z5 `) f. v) B
图3
# |$ d3 q3 f) {6 y) n2 E3. 原理图设计
) S t( v5 `! Q2 D) g) a+ D( J
( V6 d0 o( J) N! f6 ?MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
. J8 B6 N6 X( m1 [. H 5 ~0 ~+ _; U! q4 w8 S. W
/ J4 z( Z1 q: D( s e
图4 Camera sensor连接座如下:
% [, t3 c: J. n' ~7 x9 S/ I$ s" {
$ G. b6 b# D- [/ K - x2 L! I1 E5 K' W
图5 0 ]8 W2 k/ z: V
(1) OV5640输出的数据格式
6 R J- [5 l9 M《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:" g. I; }+ G# \2 N& f V# v
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
4 n9 U5 ` P3 C; a6 [7 a qSensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
- P5 n4 y9 x% l' N* @! ?而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
- j+ p5 k7 |) z9 |2 }8 y$ m( C
4 p: }6 X1 u; g. a$ k% y 1 A. r$ q( \1 @. m
图6
( j0 K8 _; W9 x# E
; Q- a+ B& v6 C(2) OV5640IIC地址
6 N+ t0 N+ Q- T7 b5 f1 X ) M$ B/ ~/ y: M
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
8 {& ~. o; K" h% A: \" N1 F. X( N! A$ ?
3 d; Q! W. o) k+ }1 W $ m" n4 H+ A- }+ ]( I d! L( ~
图7 IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则0 q$ B' G0 B# u; ` i. r
$ S4 K S" w9 T0 H" E
4 X8 ^6 y9 W7 J! ~5 \9 [2 Y4. 驱动实现, f' M; q* I0 ~, n: j
; ]. G, F% J, V0 v* g. ]8 x
. ]4 u; Q6 n# }, W/ i
4.1 相关代码
6 I% V4 L; S# _8 E, L6 L; ~5 D* J(1) CameraSensor驱动相关文件
/ o/ U; x4 U+ E/ u; ?\mediatek\custom\common\kernel\imgsensor\ov5642_yuv) w# ]+ n- `( v7 w
7 W+ F! T( R( r(2) SensorID和一些枚举类型的定义, B2 @5 u/ g% T3 v, p6 U
\mediatek\custom\common\kernel\imgsensor\inc( V* s' M& w |
kd_imgsensor.h---------SensorID' J* S$ n5 M( d5 ~* z, k
kd_imgsensor_define.h--------------一些枚举类型的定义8 }+ S: V3 w' p2 J9 P9 z
3 [3 {; w2 _2 ~) w* M(3) Sensor供电0 p$ N' S; L; j
\mediatek\custom\common\kernel\camera\camera
5 K R. f# U5 n. okd_camera_hw.c和kd_camera_hw.h( C$ F) d3 @: f
! \8 r0 V P& Q2 e" d8 k3 ^
(4) KernelSpace的SensorList,imgsensor模块注册2 G" F, Y! f) ?6 z6 A% j1 y. k
\mediatek\custom\common\kernel\imgsensor\src
% t5 L* M4 s/ d+ H3 Ykd_sensorlist.c和kd_sensorlist.h-----------camera模块加载
) s* R8 ` a/ \- n
* [4 F& j$ L6 H0 r(5) UserSpace的SensorList,向用户空间提供支持的SensorList
9 ?- m. x( e0 }5 L* w5 _8 t; A$ B\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp( [0 X0 \0 g$ y" @- D% f
提供给用户空间的SensorList5 p3 C/ t/ i. z! M/ G& X! a
4 U- E8 G9 ^3 f# U5 O& O; ]
) U& S) j b+ }4 _- w: g) t(6) Sensor效果调整的接口
+ H" h2 [# S5 R" x7 p\mediatek\custom\common\hal\imgsensor\ov5642_yuv5 \5 K# U4 O& W' q) P) [' c
. f. y/ N: i" O) N/ \
) T y1 P4 ?0 i1 W' G4.2 针对OV5640的修改 R, B" |6 D$ T1 B3 b& ]
+ n, f5 {3 ]2 P T4 M9 ^
4.2.1 mediatek\config\hsimobile77_ics2\ProjectConfig.mk
! v' C- z# ? v- |6 H
: W( @2 \% R; x" F- ]CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
6 C1 l& W+ q9 o- p2 @mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。. A0 q7 C; f$ j& Q5 }5 d* a
4 w. R6 C: O S& @. ygc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。5 f$ P0 x' A/ v, s5 h+ h
+ }# [9 N2 O- y5 R
我们采用的OV5640就带有ISP,输出YUV格式6 N+ ~! `; G4 Z; P$ r
+ [ a# c. L' h3 X- t(1) 把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
% T1 X/ a7 y3 [ ~0 q8 g0 W2 u% z' f(2) 去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
" Z" @1 t# X2 l: M7 K 0 j- u3 x: S2 D8 c) R( a
修改之后的HAL层的配置:- D; O) \$ ]% n- l( o6 x
( h# [! b2 Y& N( B[html] view plaincopy - K! p7 h1 H( Q% c
1 D) r' o8 ? L1 R2 n% S) g B6 n, c+ B7 V! c" _/ U
- CUSTOM_HAL_IMGSENSOR=ov5640_yuv
- CUSTOM_HAL_LENS=fm50afdummy_lens
- CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR=
- CUSTOM_HAL_MAIN_BACKUP_LENS=
- CUSTOM_HAL_MAIN_IMGSENSOR=ov5640_yuv
- CUSTOM_HAL_MAIN_LENS=fm50af
- CUSTOM_HAL_MATV=
- CUSTOM_HAL_MSENSORLIB=mmc328xakm8975 ami304 yamaha530 mag3110 akmd8963
- CUSTOM_HAL_SENSORS=sensor
- CUSTOM_HAL_SUB_BACKUP_IMGSENSOR=
- CUSTOM_HAL_SUB_BACKUP_LENS=
- CUSTOM_HAL_SUB_IMGSENSOR=
- CUSTOM_HAL_SUB_LENS=dummy_lens / L5 {7 N( d$ h Q
9 h" m: S' V3 j" E# _9 H/ b9 V9 Z: A' T9 M0 _1 n
2 j* C$ V# U. Z* I% H4 N x( C4 }- Z
修改之后的kernel层的配置:$ [; `6 R- a6 C
! z& z" r$ U& a1 } t* M2 A[html] view plaincopy , d' Z% [$ [3 a1 G1 V
; X; a# g7 K! `7 J; u' s3 w; h* j9 [4 B0 s M) A
- CUSTOM_KERNEL_IMGSENSOR=ov5640_yuv
- CUSTOM_KERNEL_JOGBALL=
- CUSTOM_KERNEL_KPD=kpd
- CUSTOM_KERNEL_LCM=ili9806e
- CUSTOM_KERNEL_LEDS=mt65xx
- CUSTOM_KERNEL_LENS=fm50afdummy_lens
- CUSTOM_KERNEL_MAGNETOMETER=akm8975
- CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR=
- CUSTOM_KERNEL_MAIN_BACKUP_LENS=
- CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5640_yuv
- CUSTOM_KERNEL_MAIN_LENS=fm50af
- CUSTOM_KERNEL_MATV=
- CUSTOM_KERNEL_OFN=
- CUSTOM_KERNEL_RTC=rtc
- CUSTOM_KERNEL_SOUND=amp_6329pmic_2in1_spk
- CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR=
- CUSTOM_KERNEL_SUB_BACKUP_LENS=
- CUSTOM_KERNEL_SUB_IMGSENSOR=
- CUSTOM_KERNEL_SUB_LENS=dummy_lens
$ ^: W1 b" L8 N+ ^0 \" r
9 T6 r/ T8 @+ m9 F( Q Q$ M; Z* j/ F( a- F/ o
7 O9 B W/ B3 ~! \
% C8 n; V! s9 d2 k" K虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
8 |; n$ m2 {# k9 }; c U4 W. _9 { f Y7 D+ _7 \7 f# m
[plain] view plaincopy 
# m2 D; C' R5 y$ M5 T: o
+ B4 o/ V/ M- a0 N: a$ Y2 U& E/ m7 l
- prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld:out/target/product/hsimobile77_ics2/obj/SHARED_LIBRARIES/libcameracustom_intermediates/common/hal/lens/lenslist.o:in function global constructors keyed tolenslist.cpp:mediatek/source/external/mhal/src/custom/common/hal/lens/lenslist.cpp:82:error: undefined reference to 'pDummy_getDefaultData'
- make[3]: ***[out/target/product/hsimobile77_ics2/obj/SHARED_LIBRARIES/libcameracustom_intermediates/LINKED/libcameracustom.so]Error 1 l! ]3 \2 X& V9 g( E% n: P% t
8 m. v5 C/ Q8 k, n6 Y
0 O2 X$ t1 Y. A2 T- P- R
: q9 o; ?1 ]# h+ I& s
; a5 ~4 w' G8 m4 J* S! g: D4.2.2 mediatek\custom\common\kernel\imgsensor----------kernel层, i: `' @4 `, M) T
+ y7 y( e/ h3 ^9 B6 e" b6 b- D(1) 创建ov5640_yuv并建立需要的文件
9 d3 j. S$ A3 C9 U! k" Y+ { . [) f; T$ H$ P5 h3 H/ g* s
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。3 A5 _7 d4 |; z. m
" a, ~+ F4 w, O: {+ M
编译发现mediatek\custom\common\kernel\imgsensor\ov5640_yuv\ov5640yuv_Sensor.c文件用到的OV5640_FULL_PERIOD_PIXEL_NUMS_HTS、OV5640_FULL_PERIOD_LINE_NUMS_VTS、OV5640_PV_PERIOD_PIXEL_NUMS_HTS和OV5640_PV_PERIOD_LINE_NUMS_VTS没有定义,但ov5642yuv_Sensor.c是没有这几个宏定义,我暂时定义如下:& x3 M" {. x% P" n# H
) H5 x: U, ]: `5 Z; I$ n! ^7 H8 H/ X
[cpp] view plaincopy + k$ k6 J& }+ w. D
( `! }; l& q$ a5 s; m" ]
! J# u# L- z$ `8 m- T( L% ^2 Q; L- //kandi add startat 2014.11.29
- #defineOV5640_FULL_PERIOD_PIXEL_NUMS_HTS OV5640_FULL_PERIOD_PIXEL_NUMS
- #define OV5640_FULL_PERIOD_LINE_NUMS_VTS OV5640_FULL_PERIOD_LINE_NUMS
-
- #defineOV5640_PV_PERIOD_PIXEL_NUMS_HTS OV5640_PV_PERIOD_PIXEL_NUMS
- #define OV5640_PV_PERIOD_LINE_NUMS_VTS OV5640_PV_PERIOD_LINE_NUMS
x5 W: |; J3 f. j$ F
G" Y X3 V# c9 \ l, z1 v& |8 r# r2 v; w0 f# u7 A
6 @; |# v0 J% n- K* h/ P- f! \& [这是参考ov5642的相关定义来定义的。, O- u: ?1 g R4 l; v# x
, f% h5 ~/ U1 r* t! e9 t" G+ b(2) 在支持的sensor列表中增加目标sensor
4 S% D* G9 x; S! b
: h. T0 d6 q) Z* |5 umediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
2 i6 O/ v% q4 o+ n' v* W$ H在数组增加OV5640的内容,如下:
; y3 W# F& Q7 k, z0 I1 b: K/ L6 g- \
[cpp] view plaincopy 
! ]% Q! g: l: t7 b
' C. e$ ]) v& v" e
. |6 {, e0 e, v% p9 _9 g. q+ n; D- ACDK_KD_SENSOR_INIT_FUNCTION_STRUCTkdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
- {
- ………….
- #if defined(OV5640_YUV)
- {OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, OV5640_YUV_SensorInit},
- #endif
- …………….
- } 7 \0 \0 q: @. K, s, f! p
7 ?+ u0 V* d. {$ i0 @1 a F
3 |) h. j4 T# N U6 u+ Y9 {& w, A0 k8 E$ H8 h
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);8 B7 A' C8 L2 I- d
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h% J/ S. R, m3 v! @0 V
5 Q! R7 o: }, u4 d$ N9 O9 I0 H
(3) 增加sensor ID和字符串的定义
: j7 D+ R8 X! Y5 Q. g) U) l- g
2 X+ } V' F: X' M! A[cpp] view plaincopy 
, R; I% k; O; A- O2 |9 {2 X3 x6 \
3 F4 t! \( {- u' u1 X* m# E: P
0 K4 ^3 L. z9 j( S1 y+ e- #defineOV5640_SENSOR_ID 0x5640
- #defineSENSOR_DRVNAME_OV5640_YUV "ov5640yuv"
5 i K1 {) k: \& P9 E" B 8 ]. ^" i; N" e1 y- F o' p* R
. T x' K( L0 ]6 R; A
9 V% v5 p% v% D" H- D4 C% Z4.2.3 mediatek\custom\common\hal\imgsensor---------------HAL层
9 \* D$ o! r* W, g$ U: z
/ Y& `( z& _! l1 A! |(1) 创建ov5640_yuv文件夹+ }1 n: q3 T, J' r
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
8 f g; Y4 d* U' dov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:2 d K9 D! O) u' b
图8 ! L5 N7 X6 z" a
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。5 m. Q7 R% e, U2 [4 h, o! |
/ p; e6 B6 @4 S
图9 : o- Z7 h* T6 ^# j
此文件下有两个这样的地方不同,这里是指自动对焦模式。
! p. |% _! P4 t% b, ?9 K2 A) K) R . { h0 m l+ a# V
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
2 u. u- p5 t# }/ f
. R2 h% I! O: p所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv
) g1 j, }( h+ d8 r
7 d4 v- L7 M" r( r(2) 在支持的sensor列表中增加目标sensor
3 s; F( C8 N7 L% w& Y9 x : {# w- S5 I. L1 C1 P
\src\ sensorlist.cpp# s2 Q6 W) ~1 h% W; }2 [9 s
& |2 B9 v$ ~3 f6 F
[cpp] view plaincopy ( ~' z. r+ E# U
3 [3 ~* }/ Y8 k' g7 f, w
, T! `' Z2 \4 ?- F1 g- MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =
- {
- ………..
- #ifdefined(OV5640_YUV)
- YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),
- #endif
- …………
- }
7 \" @4 o; Q" a8 p 4 r# B2 B0 t$ a! M3 Z# i
( E/ ^& g, F$ v7 ]8 H# U3 T* J
" B- f' Z9 L/ z" }; a
注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。" @( P" D& V/ Y; T. l
8 o! }* T0 G' N. D4 F0 G
: {6 `: s& a" h) }7 ^
4.3 拍照图片尺寸设置
9 K0 s9 o5 U) C ( M9 s9 U# O6 Z
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h8 l+ Y2 ]3 X$ T1 h; ~) B8 a
. @2 p% ^% I- X5 p! G[cpp] view plaincopy 2 I7 Y) v+ D* m8 P1 m9 q
! t& G5 y( l3 r
W! O4 ]# z6 [6 W, f
- // Capture Size
- CONFIG_FEATURE_SI(FID_CAP_SIZE,
- BY_DEFAULT(CAPTURE_SIZE_2560_1920),
- CAPTURE_SIZE_1280_960, CAPTURE_SIZE_1600_1200,
- CAPTURE_SIZE_2048_1536,CAPTURE_SIZE_2560_1920
- ) ! b4 B: z2 M6 g# U: Y P: g6 {9 ^
- F( I- f# y9 g A* S
0 P' e2 w* q( B% M' C; ?4.4 Camera物理角度旋转
- j" c+ Q! I# G' x. _; mCfg_setting_imgsensor.h
% J6 q9 c, b8 I2 a( n4 b
: r% v4 L% l; o6 T& Q* ~[cpp] view plaincopy 
4 D( p+ J9 U6 G3 ~4 K9 T( e3 {
$ c* \' h1 c1 o) H0 T( i# n$ f0 K3 X. `8 @* N W; g
- /*******************************************************************************
- * Image SensorOrientation
- *******************************************************************************/
- SensorOrientation_Tconst&
- getSensorOrientation()
- {
- static SensorOrientation_T const inst = {
- u4Degree_0 : 0,//270,//180,//90, // main sensor in degree (0, 90, 180, 270),kandi change from 90 to 180
- u4Degree_1 : 0, // sub sensor in degree (0, 90, 180, 270)
- };
- return inst;
- } 7 w# J) V: R6 v' G
+ t( d; ]. S$ b8 S
2 Z# Q, e$ Z9 }* ^$ u9 }
: u/ S& `+ S" n5 m; j( o: Q0 O
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)
- c' e s0 G+ ]1 M n6 `参考:http://blog.csdn.net/loongembedded/article/details/41679977* S+ I+ U. @: F0 O' b. ?( _/ y
( |3 V0 T9 E! n& d
4 Z; X4 d4 X" [* g q' V! j看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。 h# t( p/ f$ }* a: ^5 i
http://bbs.csdn.net/topics/3908371505 X) X5 T7 _; a
9 F! A8 F. ?0 Y+ V S3 a" c- ~6 Y1 X6 Z; e可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。+ S. a; ?5 G7 v. N
( ]0 \% A; Y8 }7 f+ ^' o( a( `mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h) @6 A- k- w1 A# i/ y9 B
! p# V( G. [( w+ V' f- z[cpp] view plaincopy + O9 l1 @# `# ~( `& D
5 h1 c( U* R; ~
b- p+ z8 z2 q$ a8 |% ~$ F- /*
- // Capture Size
- CONFIG_FEATURE_SI(FID_CAP_SIZE,
- BY_DEFAULT(CAPTURE_SIZE_2560_1920),
- CAPTURE_SIZE_1280_960, CAPTURE_SIZE_1600_1200,
- CAPTURE_SIZE_2048_1536,CAPTURE_SIZE_2560_1920
- )
- */
- // Capture Size
- CONFIG_FEATURE_SI(FID_CAP_SIZE,
- BY_DEFAULT(CAPTURE_SIZE_1920_2560),
- CAPTURE_SIZE_960_1280, CAPTURE_SIZE_1200_1600,
- CAPTURE_SIZE_1536_2048,CAPTURE_SIZE_1920_2560
- )
7 Y0 z) J8 U# s
0 I' _" B$ I% u0 G ?0 @# {9 |3 D4 z5 k9 q. h' I+ O' c
* e9 {1 e2 \3 {( ~/ H' U, y u% b0 Z, G2 z9 a$ ~5 b0 g: ]% J
- ]1 \0 V# W: H% Y. x) N我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
. c3 X* `* @* n % y3 @. S' k6 `1 I: t, N
* L$ v6 ]/ f5 Q& u5 b. |' J$ P8 D
4 e& r" `) S3 W" G. s参考链接:8 V* b) `; u% F
MTKAndroid Driver:camera6 P8 N; W; |/ P# U
http://blog.csdn.net/cbk861110/article/details/17437283
1 k% W4 O% ?/ t4 A' H5 k- i" P7 ] 2 P( j& R' j( z2 {; k6 `; ~
) A @6 J) F6 w2 Y% z( N/ A: T! wMTK cameraimage sensor driver
4 u3 W! P5 }1 F9 W) h3 S( _ uhttp://blog.csdn.net/sunweizhong1024/article/details/8497790
8 n. p2 b7 p/ w- p
x) ~' E4 [2 x6 b5 _/ gMTK平台的ISP架构问题
0 x0 ^% @! Q' l0 K! B0 @/ y' zhttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727" ]' z2 w% x9 y9 k( n; `0 T' b2 D9 g
0 w5 ?0 r' y# x
OV5640 YUV的自动对焦功能为何没有开启
+ A& E% s/ k% b2 O4 Vhttp://www.16rd.com/thread-10480-1-1.html6 I; y/ s9 x! i/ d7 f
, j4 ]) `* ?* N- C: d6 a9 l
MTK Android Driver知识大全
3 Y0 O% K1 P8 R5 z6 ihttp://blog.csdn.net/cbk861110/article/details/40931835: x# J- N" c4 V t4 \( _( p
8 y$ v4 `, `$ H: a% c: b+ w
mtk camera移植步骤
1 w( `. D- p2 u" D( I+ qhttp://blog.csdn.net/vasvas/article/details/39250473/ ?6 [4 f8 q- U( V6 F; ?
, Y1 R- r; G* ^, y6 j- Z8 V关于 前置摄像头安装0度或者180度
D: y5 j0 u: J: ]% k. {9 p2 W6 d2 jhttp://blog.csdn.net/kkkvvv123/article/details/8809823
4 I! v5 ]( f9 ~) L" [( R' c. _* _
" B* m/ }& D6 D6 y; |* i! pCamera 涉及的文件70
, j* C7 i+ Q8 _: _5 q* j1 G+ Dhttp://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html+ o, N5 g- v* `+ }
0 |/ N W8 D6 B0 {) j
OV5640全景模式预览倒180度,拍照正常的问题
* b, Y5 Q8 h5 x$ r0 u) p2 q# whttp://blog.csdn.net/guoguo295/article/details/21245815
+ |7 s# T. b. ~+ V: U9 ?" M; Y$ }7 t1 I1 G: b P
" X( l( S3 h+ N; z4 C9 [/ z0 w
% s' p3 ~/ Y4 f4 U3 E: w P- B: D
, d2 `; `" i2 t0 Z1 q3 X 1 `5 ~' z1 x+ w
: r6 A" @' x# o |
|