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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动- f$ |& V$ L; f
/ h+ u3 u+ z" ~

+ {/ X$ u) R1 Z7 x$ I7 S$ ?
MTK6577+Android之Camera驱动

, B% c$ D$ o4 ^+ k: z

1 }0 A( k& |' m9 g8 W6 ]  T! o; d

9 t( U' p9 V* @: J; K, ]" j
图1
% `" E3 m( {9 l. k& {" d: A9 i
1.     Camera拍照相关概念
( g' A7 m- k# ]8 n" U; o% N1 P . f' Y( o3 [  D4 W4 l
1.1  ISP
/ K8 V: K) g/ F% D# ^' i- N  T
/ Z* g0 Q) g  o! D, n' Z' u" N0 |isp——(Image Signal Processor)——影视处理
9 u7 v: H4 Q' Y* B8 \ 7 Y3 o4 t6 ]1 ?  Z$ X
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上
: b# Q+ e) x, i# J0 m! B9 w * r& b$ b1 b3 _5 n/ S" ^: P
1.2  720p! @0 I& W& e6 J/ I. U0 X
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。' H9 {- b) X1 I* M* x$ s
8 e- H; Z- w0 U
分辨率为1280×720p/60Hz,行频为45kHz% J7 `% o( `( Z# Q
4 b- r5 b9 T' q' }, A
" g' T& [) s$ r
2.     MTK6577Camera控制器部分2 F; [5 }/ ]5 m* @

! R8 z; H% H" S" E2.1  camera控制器概述
' C2 a# F* M$ Z0 e4 ]MT6577 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)这些特征,用于图像处理。
! y/ k: E5 O8 ^' k- F $ a- ^- y6 @7 f# x
2.2  camera特征
- m+ Y0 u1 m! b2 k
  |3 i, e* i/ q# kMT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。
- B1 X# Y9 k! B  Y& L0 q 2 e9 E7 N5 z3 o
支持的特征如下:3 y7 j2 t7 ~% _8 ]' }$ `
(1)   抓图分辨率达8M像素(image capture resolution)。
. H1 v1 F$ M! x9 V+ m- Z$ ?, X- o5 ~(2)   录像分辨率达720p(video recording resolution)。
1 M, |! I- f, S, u" {' n0 K4 V(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。4 |8 D+ ?3 [% [* P% F( v
(4)   曝光抓图率8M@7(burst capture rate)。: g! F2 L& z" R8 {  l! G
(5)   图像处理  _+ n  ]7 K$ b8 C9 }4 i
低像素补偿(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)。9 d8 j# z' i% n, x7 w/ y* ?) q

! F( X# Q  N0 m7 W( {: H. n(6)   3A统计和校正(statistics and correction)2 f8 f+ Z. b/ r; v# [
(7)   闪烁检测(flicker detection)。
7 r. |$ P. }, \ - X, @. u% P6 v( v2 ^% {- X
2.3  camera框图! d6 \* J5 |' P# [! ?
. [! r: Z/ D8 R: i0 B
$ K2 E& p, Q3 v2 B
图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)单元。4 r! Z  }' c1 P4 r7 ?) Z
% O- q! [5 z5 s4 ^" o
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
+ M. v9 r$ w8 a' K1 e: t . x$ Y- a* ~; X" x/ o& _
色彩处理单元接受来之镜头/传感器补偿(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读取出来。2 }9 t0 M9 ?/ o* p: C7 Z6 f0 Z- L
5 J7 w4 R: Y: T9 i+ ]
下面给出一些性能参数:1 ]' R3 `- }; M5 ], j/ \" @6 f

& w% U2 _# ]6 h8 X

( B0 t; M2 q; @' {
图3
  p) y2 D% S: x
3.     原理图设计
/ s; ^8 ]5 F( e% i$ k4 a
! W' ~# O3 h6 E* a7 [MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:, _  M9 [3 r$ z! e' }4 P
8 M. s  V4 ~) G5 Q% J; h
* H- U. s* S& Z. k5 V' g" h
图4
Camera sensor连接座如下:" c9 ], ]* b" \) \' j- Z

  O3 N2 N' ?6 _) P$ ^% G
  k* E$ O- l' T% Y+ k2 ]
图5

' [! p$ y3 A6 B(1)  OV5640输出的数据格式5 s: E2 M3 q, @* s, W; w# U$ v2 b
《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
' I! p8 ~1 h3 `* k" k1 R2 A/ s! K0 ?& YSensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
) S* ]# ?  t# D2 j6 ]Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]( U0 X2 ?% Y- o' n4 ~- Y" Z7 f
而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
! d7 U7 s) X5 |+ _

0 z% [/ ~' B% a5 `

! \) \( _5 i2 A+ X
图6

4 K# u2 h. Q( D' _! m . W7 L* O: D+ B) Y4 x2 h
(2)  OV5640IIC地址
' _; l: ^4 q4 S# o$ U1 y" @0 w
$ q$ `0 n* v; M; ]# V* FIIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:, x5 s& |, a( y" O

! i3 ~7 _! z' D
5 |7 p: A5 t/ o
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
  ?9 |; Q. v8 V5 ?+ g# P. w
  p7 c8 K2 Q/ J  T

% U2 i: b/ O4 w1 N3 A2 a4.     驱动实现
- h$ O# }  s" H7 f + f3 m- }5 Y9 p3 |+ R1 z0 `3 Y* G) U
( u, E% G! _4 ?( Z
4.1  相关代码7 C9 e5 G& J# Y/ `! A. x# e
(1)  CameraSensor驱动相关文件+ O9 c# p& o7 K* i) @
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
4 E/ y: g  z8 S % p% l" \/ ?1 ^3 D2 o2 @( h: F  Z1 \
(2)  SensorID和一些枚举类型的定义9 U9 q' C' X2 ~& I) r/ \; z
\mediatek\custom\common\kernel\imgsensor\inc
" r. R) G8 \+ J  I% C' ~2 T. gkd_imgsensor.h---------SensorID, d+ P( o* ]) K& R" o
kd_imgsensor_define.h--------------一些枚举类型的定义
$ R) e- I7 x9 _
9 n$ V4 ]$ C$ P(3)  Sensor供电
7 h" U: o! F- e4 }: Y\mediatek\custom\common\kernel\camera\camera6 A7 q, @- [% F. X0 B
kd_camera_hw.c和kd_camera_hw.h  a( ?& j' H7 o- y- y7 ]
. r+ M6 _! d: I  l, v/ ?
(4)  KernelSpace的SensorList,imgsensor模块注册
& T! y- h' C7 W\mediatek\custom\common\kernel\imgsensor\src* m' ?$ c: `2 k. h
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载) z2 k: R4 |0 o! U4 D
9 v( K3 }" \. o" h5 D6 S6 ]' ?
(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
& V# C3 l1 h8 }) E% v; h\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp5 d7 s3 s1 \1 Y/ e+ a) `4 f
提供给用户空间的SensorList7 l% C0 k3 T: v4 g/ R& [# g

2 h3 i( _! E6 w9 c; F* b : X- K5 E9 U' [6 \4 l) u( n5 C
(6)  Sensor效果调整的接口  a- l" l& m4 A2 M
\mediatek\custom\common\hal\imgsensor\ov5642_yuv& t0 }0 b3 L* R) P" T
0 x6 D, s! f/ V) I8 p. m

, Z! f/ e) V% d9 _4.2  针对OV5640的修改
* Q! m7 q! u; q& K5 f- z: o# G7 g
0 n5 t8 L1 x4 w! ^' m4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk
9 B% Z4 ^) a3 X5 F, k4 O) l & M: ?+ a& a) I5 H
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
0 P: c" g+ J3 T. Nmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
. t5 ]  z6 |  C 3 t. E0 r& |3 o5 ~$ y+ q. O
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。+ r$ Q1 j' `) W' G1 x) `

, B- A' R* s1 |2 Z! S我们采用的OV5640就带有ISP,输出YUV格式
' f- M4 s: l, _) O& ~) v
$ R- ]2 {, [6 d) V- x(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
! x; r! Y% L6 |* ~2 K+ S(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
( n2 R/ H' }% ?6 q3 D4 Q3 N 0 I* A& U* k1 k! }1 j
修改之后的HAL层的配置:
8 i) A7 W9 M+ E: [1 S5 J) y9 L& C' \7 E+ ^! u# }# C+ b' G$ V) o
[html] view plaincopy+ i! E9 J, V+ f; G6 U

+ Y) _# I) [" C% w. U- e# e+ h3 N! @: {2 I$ F
  • 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  
    $ }0 n( U- D7 a

9 K3 m/ _6 q1 h2 X0 }1 x* \9 j. I5 G8 P* t. \7 m

: v7 n5 J3 A, o- [7 l修改之后的kernel层的配置:! j  p& e& [/ }( x0 y5 `: P2 `

& I! x" K8 a& k( o( C5 \) f! p3 H, ]- l[html] view plaincopy
9 ^6 N+ N8 U. S3 W6 `
( a5 h3 M' i; ]5 z

( M7 H) T- S0 j  ^. G! {
  • 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  
    : \2 }. p6 A( q4 x+ `

1 G% o/ m8 _9 @6 C6 f; E
: C  u/ t: a5 h' p- B- O! g
5 w4 A1 w; W# l- `3 t
3 J( W+ \+ a' b- Q) k虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
" W) e8 M9 L  H  f- u8 X* w
( w% Z3 {0 m  S2 D[plain] view plaincopy+ B* h* f- k$ d3 x

" q2 S9 u$ Y7 I
5 D, K9 B( E; Q
  • 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  & J# H+ h* i; c& [$ n/ {: q% t+ W2 ^
* t) y+ f1 [6 `$ ^7 b0 m

% }8 h2 f( z0 d# a+ M0 ]/ h2 ~  }- D  N% ?% h
- R- @& i. F. j0 ?3 ~6 j: N- z. M
4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
, n1 ~' j. G" ?. j6 W 4 ]. I( {( p' ~- p
(1)  创建ov5640_yuv并建立需要的文件. t6 ?  s& E* ^: l0 u
+ F0 Q" @) P# e( b+ [9 D
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。+ O8 S+ D' H7 r4 e
' @: n$ b% E; I, v6 b
编译发现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是没有这几个宏定义,我暂时定义如下:
  d" A) j$ z$ l2 u- s: `7 O2 b" R# V" C
[cpp] view plaincopy2 ]% R) V7 @( J3 E3 ?' l6 I3 U
3 O2 v6 ]4 Q  o+ c4 g

" U% ?9 X/ w! U! ^6 t7 Y  h
  • //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  8 v2 p& A2 Z/ V

( ~% D. J: o6 \) T/ s1 t9 }
1 `  j7 T. W! e) I+ }; m' G# B: x# F
这是参考ov5642的相关定义来定义的。
! p- G' |, B' ^ 9 L' h  X' N/ S7 ]' |
(2)  在支持的sensor列表中增加目标sensor
. ?' n0 m0 f9 P0 ` 8 o4 e" R" ^1 h2 B. N, @4 G! r! Z- A
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
" t) s) a3 s" Z& \& e在数组增加OV5640的内容,如下:
) K3 U; ?3 P6 A6 U0 l' g( E, w& G3 f0 g5 M4 H: \- }
[cpp] view plaincopy6 Y1 x; b" {0 ~; B. j

2 \* T5 M; u( M, r' s" U9 I3 H7 Q  k3 ?! h6 ~5 R
  • 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  
  • …………….  
  • }  
    3 D( k& [  t0 [0 N6 C/ c4 {2 O( U/ t

. X6 R8 U0 c: t- s- }+ Y. O! k# b. v6 a* q3 W1 ~

: ]' V& b1 G9 \& v  @+ _+ K也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);( f( d8 }. S* V1 y& t; c0 v$ v" Z* R
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h* @) O3 u- ]" p; U* K* y' t7 L

$ T. x7 s8 M0 ~0 A% T(3)  增加sensor ID和字符串的定义
; E  ~' H/ n' c  T6 _7 U
, ]5 y; U4 `3 R( x0 [6 Y2 K) z[cpp] view plaincopy
% ]' E1 C( T( s

1 A, o1 D. n; o* B! r: A+ E$ A- |
0 O. Z% P5 Y0 E: x, a
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  : V- Z  y/ [' o8 H; x4 \! K

& f/ ^4 Y9 E% P* ]% c
: ?& r9 X- H# w5 Q0 p( H8 F) t- ~) N% Z% C: ?' o
4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层- r* }! A% O4 k  d

$ `' k3 k  a, X' O7 q, M(1)  创建ov5640_yuv文件夹3 A" l4 h* R# e; B# z
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
: b$ a& o) }8 Q6 S. Yov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
# _0 A: F  c; w
图8

7 L4 V; d) p. V8 t% @. ]4 D这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。- [4 V. b4 C7 E) Q" q9 P

7 i$ [7 m! f4 w" D# h; e
图9
" w  Y8 X$ ?, E: O8 q4 ~+ D
此文件下有两个这样的地方不同,这里是指自动对焦模式。" ]1 q2 O# x0 e+ j) E
) l: e9 d1 M( U6 C
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。# S. }0 T8 G' w2 K8 O; m
* Y% \9 ~; E% u3 R$ l) @: t
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv
, @* m/ E' n2 \# H3 G
9 R+ I% x: `- n# ?6 \* d/ N(2)  在支持的sensor列表中增加目标sensor
% ~8 i6 I$ H. {. G& X+ [, Q1 V& Z - a) Y) i$ ]) |2 b' Z
\src\ sensorlist.cpp1 h8 x- {, k) m/ t$ y! H% a

/ C$ Y. Q: x9 k" R! _- q0 X1 l[cpp] view plaincopy6 n8 A9 ~/ A  ^7 ]; H( v
9 j9 Q; Y3 T" ]1 ~, N
0 C! @  h! v, b! L2 }( r2 d
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    # f0 s! T  b" }8 C7 G& u3 X
$ Z& X1 `) W7 _6 D1 Z

- `+ f0 D  A; z; ~1 F" `
# C0 W. z+ {" E( K) n! p$ h1 u, m注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
! d# [. z& ?# S4 J, ?* e( a $ W. g5 L6 Z! e3 N0 R2 D7 r
$ B, |# H2 i% Q. r
4.3  拍照图片尺寸设置
7 J! w5 [, @% x3 K+ b3 g
$ M" X0 G) i1 B; d% E2 bmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
% K/ V" v- n: \( L9 x" ], F5 m
; ^9 f$ E  \- F) ?3 e[cpp] view plaincopy
5 p; H4 b  z( Z3 f* `) o, o8 x/ _

- m4 s8 \" K5 Y7 ^
# K4 F* ?5 q7 h# k& ^" J! q# A8 q' h. i- Z
  • // 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  
  •    )  
    , a: Z  S# `  Q4 S8 [

( |! ~- D' W7 r6 G: r* q
( P9 \3 Y! G; C/ n0 w1 j; W4.4  Camera物理角度旋转3 C: |; S$ ?2 }. o2 {& D( y
Cfg_setting_imgsensor.h
& D6 C8 c/ _6 `! x
! {; j1 ?/ Y  e0 e* d. _. d  F[cpp] view plaincopy
5 b! t8 A. Q7 ]3 ^0 ?: t# |

- r8 R& W) u# S) M* }. I) L# Y
+ L: C+ P+ u* k; ?6 N1 `# `
  • /*******************************************************************************
  • * 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;  
  • }  6 Q" r0 d, k- P/ L$ t0 H
  e% }! J( Y/ f5 W. \
# ?3 |! J1 \  ]% F* {7 b

  |6 W9 `6 X/ o" b# p这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)3 N# Y& M. t! H% b
参考:http://blog.csdn.net/loongembedded/article/details/41679977
% Y" H: o$ N/ s$ ~* K, i* O
# X) g- q+ u/ Z% Q7 }8 c. ?0 J. H. `0 K

; p1 l! ]$ }2 c/ h3 s看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
0 c8 T& S$ N0 ]. X7 Y& W+ zhttp://bbs.csdn.net/topics/390837150
6 w7 ^; w4 g* i! M9 D. k% M
3 ?; |; W6 P2 t# E7 s可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。5 q- ~1 |- V2 Q' i/ }; S

6 }& E: R, d1 _mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h( i( ~4 l; S/ h4 \6 f5 Z: q. B
( I; d/ C0 Z$ h: P3 o" g: I( b) w
[cpp] view plaincopy
. N3 V& ]/ k4 V# E$ I) \, u# F3 R

) h2 a9 ~- }# e% t0 |$ p
8 C* x# B! P2 I, S8 k, o6 x7 r
  • /*
  •     // 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  
  • )  
    1 |$ }( U) r$ w0 @, i9 X% {
$ e- r- F$ k) Q

  u6 X. l. r. T7 b# \+ X8 N
2 H& _$ A2 d* s% ]+ k/ A9 N. x  J( I0 h: L& P7 K! n9 Z

$ [) ^3 ?/ X+ Z4 ~! ~0 W我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”' Z, ^2 M0 i1 ^6 y; z

  [7 X5 m& K/ H/ v& f- \5 N$ `
# y: P# ?7 F( ^0 [
% s" Q0 u0 L# r& d参考链接:3 I% v& `# F- C9 i
MTKAndroid Driver:camera/ x  p, b: T. ^7 N( d
http://blog.csdn.net/cbk861110/article/details/17437283# R# A, M  I" `& M7 ?

# e3 z4 v8 Y0 D  _  G" O 7 L0 Q1 {' c: F% g; k5 E+ c# _
MTK cameraimage sensor driver( D  u6 j) x" H: `
http://blog.csdn.net/sunweizhong1024/article/details/8497790
) a. a. q* Y; ?, t+ X . n+ I# ~* J3 q' ^
MTK平台的ISP架构问题
' V( K/ N2 F( Z+ Nhttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727$ N8 }2 p1 T: }9 Q8 Q

( @" z3 l3 a2 H7 R5 M8 sOV5640 YUV的自动对焦功能为何没有开启
0 T) _2 a( W4 p! J! Xhttp://www.16rd.com/thread-10480-1-1.html( V9 {% R- E5 R# q: X
4 R! m& v4 b. E" H
MTK Android Driver知识大全
- `* W! p: }" @% dhttp://blog.csdn.net/cbk861110/article/details/40931835$ l& ]3 z: o7 J

1 T% \: k  V& K& }* a6 smtk camera移植步骤. O% g/ t' E- ?+ P7 f
http://blog.csdn.net/vasvas/article/details/39250473
! _3 T! H: e! t2 d
9 Y, d% \" h. M4 X) y) F  ?关于 前置摄像头安装0度或者180度
2 n8 B& o1 C; e7 ohttp://blog.csdn.net/kkkvvv123/article/details/8809823+ f/ ^5 }& f: X# l

1 C) T. k( s1 U. OCamera 涉及的文件70, ^: |0 K- `( y4 Z5 ^' i: A
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html& f$ o, s  g" K- M
, t$ Z1 r6 I2 G2 t; Y, }# L, o! @- V
OV5640全景模式预览倒180度,拍照正常的问题+ x0 O1 a- t9 u6 Z+ h' V
http://blog.csdn.net/guoguo295/article/details/21245815. F4 z0 o6 z1 `6 A# ~9 h1 s

/ O' ~/ Y& e4 i1 @. d! j2 U8 S1 n$ z: Y7 d
  • + a3 v" v- p4 {' I

    ! c* E1 T6 c; g
. r% R1 [% o: i. {; |( w+ V

& B7 E/ R8 h9 A% h3 V
匿名  发表于 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.