查看: 23547|回复: 1
收起左侧

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动7 u7 h7 t3 P9 X3 X  p1 ]

3 r+ v8 O6 t' p8 }3 S

& J# I% t; A  X& Y
MTK6577+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 plaincopy2 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
匿名  发表于 2018-8-8 09:45:08
generic cialis from canada cialis online paypal  http://gigawatt6.com
高级模式
B Color Image Link Quote Code Smilies @朋友 |上传

本版积分规则

在线客服

客服电话

欢迎来电咨询

188-9985 8350

微信关注

手机APP程序:
扫码下载访问

微信公众平台:
摄像头之家公众号

微信小程序:
摄像头小程序

返回顶部

QQ|站点统计|小黑屋|手机版|Archiver|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.