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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动$ s3 }- L4 L( h# u- ~' |

1 r& I3 I+ E; X4 c
' N) l, o& W. Q" m$ Q
MTK6577+Android之Camera驱动
0 T3 F- G, b6 ^5 G% J" z: ?! H. W8 K
3 O3 H" i" u& @3 P$ J
6 g4 n# G. r1 v, p6 I3 R
图1
$ L+ {' H: M: @3 w
1.     Camera拍照相关概念
  H$ t* S. U5 _2 ~- o# h- d 6 s& P; r) l+ r8 S
1.1  ISP
* q( N# ~" G8 _5 x8 K4 P$ I * |; f! k. z1 a, y5 ?" B. |1 N
isp——(Image Signal Processor)——影视处理! r, f4 s1 P; n) m# z! g
) U  p9 W8 s# c. l  `+ z( h
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上7 T& K8 \: h! I2 a
# z# k, W! z0 k: m
1.2  720p* E/ k5 C& L% _- i. H* j# E
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。5 Y4 c4 K6 b! a: k5 u
* P1 H  h2 Q; y) v9 g  g; b
分辨率为1280×720p/60Hz,行频为45kHz
" s% D6 C3 a6 m1 J# s
' q7 }; `$ ~8 r# j4 g & n* e0 A+ }* R
2.     MTK6577Camera控制器部分4 i% o, _; j1 R

5 B! a1 ~0 k; v8 O5 M1 }( |2.1  camera控制器概述
- F" m9 ]. n' h/ ]- |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)这些特征,用于图像处理。
2 h) w3 Q7 S) g9 U! N; f 8 i* @1 u( x  l: O
2.2  camera特征1 |1 I0 }1 f) |5 d, n. }% w
' D9 @& l& b, t9 v  ~: o
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。0 ^: X% v2 H) n( {$ V7 R9 E

" a6 P3 R5 c- D4 G* `支持的特征如下:; x! ~# {0 _+ I# q, o
(1)   抓图分辨率达8M像素(image capture resolution)。
/ T) ~6 e) S- X( h; H1 S(2)   录像分辨率达720p(video recording resolution)。: s- B9 h0 _) U' o8 T6 a
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。
( S2 M( ], ?' M" C1 G(4)   曝光抓图率8M@7(burst capture rate)。' a8 `" }! C+ W4 u3 M* ~% w
(5)   图像处理
1 c1 l  K) E: j1 ]' j% \% v, T低像素补偿(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)。
1 N' ?5 G5 m) B2 }; V . R1 [1 ~9 T( r1 z: j; \* L0 G" i
(6)   3A统计和校正(statistics and correction); y1 L7 D; Z; q% X) F
(7)   闪烁检测(flicker detection)。1 E2 }) j4 P2 x! P' A+ i
' v( Z* J* z1 B
2.3  camera框图
2 U" Z8 L' ~) s

" {) q9 {/ R3 ~3 B9 U( m

/ q0 A- I& o& G4 k. c+ y
图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)单元。* ~2 @: L' r2 e5 |7 I2 d3 @% ?! l" e
9 a9 a$ Q8 k' r3 E
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。2 _* _2 h' _# ^/ s# b3 X

" e* v8 r7 l5 T1 b# f  f* v; B色彩处理单元接受来之镜头/传感器补偿(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读取出来。  A0 w  n! {: X4 s9 `

* I) b4 B: f2 F$ ?下面给出一些性能参数:
+ @: n3 c- i/ W/ _4 }) [% m
# T6 x6 T1 k  y* j2 X' P6 b; r3 W
  M- _: d% g3 @% K! [5 n/ {
图3
7 }& R8 `  ^4 a" l; {- h' I# C
3.     原理图设计
' C/ e' d# h8 `! ^
& o4 i7 k4 y& x  LMT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
6 ~. T0 d5 j* x3 s2 z6 q
% q( e8 H0 {% {# l4 v

4 p+ }2 g4 ^: B, k9 \3 X2 k3 j
图4
Camera sensor连接座如下:1 u1 V" ]# D- x3 k) Q) S3 B- h# A. R, @
5 m0 O+ J9 n% ?* d* w. }! }, ]' h

' K4 P8 E2 F' `' X
图5
- Z/ O7 N; j5 c6 V
(1)  OV5640输出的数据格式
- B5 Z2 d' [: Y0 c《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
. z! ~2 U7 o$ i+ i' ?, u5 `Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]* ]% D% Y8 F) v5 P
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
3 a: o. O! _- `9 h# k8 G' D% F. u. W而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:: J) a7 P$ t# U) L

  o8 i$ Q( B, Q/ N3 B& v3 s
# z% m6 m. y: Y
图6

2 I6 R6 e( b/ C* }4 c' ^ 3 h: T' g3 u, M7 H  B$ D0 [
(2)  OV5640IIC地址1 y# I. i( e1 C5 D% s$ K
# t6 G  D' N6 U' q0 \' V4 z6 D
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
+ ?( M0 h  f+ e; R: I: f! n8 s

+ w2 m8 ^% c7 M* d' s

' `# I5 ^8 n- I5 M. f
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
+ N2 Z4 X6 w; W; R: V
- A: n) Q  X4 b8 o* ^( K

4 C0 |: [! c. s" j4.     驱动实现
; g" L# i& p+ B5 B4 ~3 l- z4 p9 u 6 r+ o7 N4 A% @( M
0 s0 q, }; q7 O
4.1  相关代码
* c! n0 R5 g, o) ~+ ?(1)  CameraSensor驱动相关文件* q$ w4 |- L- \6 }. ^2 w1 w
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
/ E& R! _/ H5 H 8 C7 ^. r7 l3 I& D8 _; D
(2)  SensorID和一些枚举类型的定义
  S* o: a! M* \0 F& n\mediatek\custom\common\kernel\imgsensor\inc. |# c& i6 [8 [
kd_imgsensor.h---------SensorID+ T- h9 I' }+ x4 M  D+ E, w
kd_imgsensor_define.h--------------一些枚举类型的定义
2 F7 y7 `2 \; u1 I! G1 c0 o
3 y! w( U1 Y4 B* c(3)  Sensor供电
/ [( Y  \, F' H' x2 ^: q\mediatek\custom\common\kernel\camera\camera
; r9 l$ ^7 _% O& ?) ]5 J" l$ Pkd_camera_hw.c和kd_camera_hw.h( w' }9 J- t9 m; }9 q5 K
( R! ]% d# i0 {( j7 x5 q
(4)  KernelSpace的SensorList,imgsensor模块注册
7 ?1 \. i' u4 k2 ]( V7 `\mediatek\custom\common\kernel\imgsensor\src9 z& {% ~: v* }; ?
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载, k- {9 N& Y4 b( `! G) D$ Z7 }2 n5 w

) Y( c3 G+ N. G3 m3 W# J(5)  UserSpace的SensorList,向用户空间提供支持的SensorList/ m, b  e  d1 P* a+ ^
\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
& V& ?8 @8 Z( ]& Z. v提供给用户空间的SensorList
/ x1 f2 m% ?; R* k! |/ N  H9 `8 K0 | + ^0 A" c/ u* w! [: C3 C

, m, J7 r' c6 V; K1 r(6)  Sensor效果调整的接口
# K+ p' H8 ^- C( K\mediatek\custom\common\hal\imgsensor\ov5642_yuv
% I8 L. @% m& `! R7 S, m   h+ E( l) r$ ?

: {$ i0 [1 J( d( O: Z0 o4 x1 D4.2  针对OV5640的修改
; n. A" \5 R# J! V! h 1 _# |5 u" p+ s$ c
4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk  `* F. L3 F1 O- v

, l1 U- O8 o8 i/ j6 G" Q7 tCUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv" }: M1 P% O( J* f7 I/ y
mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。7 ^# o. C2 N! U' D% a
5 i" [( N/ |/ \5 Z6 ~2 H) J
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。, A  r3 v+ d* T

1 r' W4 ]  e, @7 \/ P我们采用的OV5640就带有ISP,输出YUV格式
6 h5 d8 Q% e4 f; h 3 a5 i* o1 L) O7 x
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
* C+ X  O/ V2 A7 P, S6 D; C(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
9 m. O: n. y2 c- w, o$ K! }
" I$ x9 P5 e/ B9 z( E6 [$ Z修改之后的HAL层的配置:
  r7 y+ V( ^3 U9 t7 R1 ^% ~' R+ E: Y- P
[html] view plaincopy& p0 r: ?* M9 B/ S* |! j7 J1 C
5 W/ _& L7 M+ u& v
1 ^, k6 _5 S2 L1 q6 j5 x
  • 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  
    " g' z. r5 r: Q
) I1 j( r4 G; u: L" t3 X
# ?5 \4 H# \6 v3 G7 Y

6 @! b" S& k' \& q修改之后的kernel层的配置:. x, [& G* K/ o6 M6 P5 _( a# l
. f: ?( H0 E( w1 u
[html] view plaincopy
6 K. D6 Q, v9 V* Z
  T/ x3 A/ ~8 H6 R3 ^# o1 b. E

+ h6 P3 }% m6 x2 Y1 S
  • 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  
    ) R& [7 Z3 _& \1 n" m% G& I
: p" a9 A! M1 r2 @

: W1 q( {& g$ }1 ]! l, }0 ^: N; W; {0 U, s1 O$ B( z7 p. \
* b* O7 D9 A, ^" T
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:" B! v5 [, D6 ^

# a) l- i# h. U1 R, ^1 T[plain] view plaincopy
' e4 c- ]3 Z. W2 e6 T& n# V
& a4 C) ]7 Y0 q
% q6 v6 R5 A% s/ W6 E! T
  • 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/ l) O% i% x
. \5 C3 t  o  h) q4 s9 e, ?

4 Y/ E; s4 C* W2 m  l, b! t* {, h3 E. Q0 H

# F6 y3 U$ ]' q) Y( g: c; d6 F$ w; T4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
8 x$ s3 d8 ^! V" F7 ?6 d9 T / L# y+ K& ]  g$ ]. l7 t9 Y
(1)  创建ov5640_yuv并建立需要的文件5 j/ I3 J. k3 s: B9 H
) W, Y  ~9 a3 U) Q
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。
1 }$ h5 M8 O: q0 Z
7 k1 B4 d. S1 c# `编译发现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是没有这几个宏定义,我暂时定义如下:
% d7 V  F" `( A! q, ^/ e( S0 U( J
/ J% F& y7 V9 X# \  x5 u7 ~/ r[cpp] view plaincopy. V5 A5 A( r, \$ B8 o
5 K/ b, I4 H5 e$ ^$ ^0 |, d3 d
# v0 i1 d! r( ]  x
  • //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  ' \% C1 z1 Q6 I- {
( j" k+ B. f+ P% [/ J, V
! g6 H3 u; b! {' B1 Q
+ ]3 |" B% b! k& ?# D( J
这是参考ov5642的相关定义来定义的。, L( a+ K" _8 T$ w5 ~. h! N

7 @) a" ~! k% ^' `6 Y3 c" @$ T; a/ p(2)  在支持的sensor列表中增加目标sensor
& T$ R4 `) q+ @5 q ! ~( ]7 i6 e9 o$ f7 @2 q
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h$ p! \) U6 z0 P
在数组增加OV5640的内容,如下:
$ \; ~; J. S) _# B, i6 W3 ^; d5 V6 m6 A( r0 f
[cpp] view plaincopy
0 \. s( K* z2 K' q

" i6 L  P4 R3 ~) ?
0 [- ^; d2 Z! Y: E( S$ @7 h- q5 y" D9 C
  • 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  
  • …………….  
  • }  
    * {, ~$ {6 o' r' N3 {* [

1 n4 d+ @1 m! Q3 |) i
% N- f5 N  j0 X/ C
' T8 ?( V+ R3 F5 o1 C1 C也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);3 l' ]7 @. ?7 Q! k& D# B1 ?& l
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h) ?1 q. l3 y; u" b9 h+ n, f

5 @3 g6 j# _5 y6 \0 v& Q+ d) g0 M(3)  增加sensor ID和字符串的定义$ C9 x4 U3 \& R% `! n

5 v' A$ s! a: s/ W. p[cpp] view plaincopy
! M- d5 O  I: c# {3 L' c: p

: T0 a. _5 m; d# v! p2 L/ V9 R$ X! l* A3 o: l  g0 E- e
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    ( N# p0 m' J6 T

( A' f7 C& @, z1 t# @9 ~4 F3 R% R/ n; K% |- Z3 z9 x: g- a

5 ?- N# C2 S2 m; z4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层$ P; G- X- ]/ B/ s

3 D1 m% Y3 Z8 p(1)  创建ov5640_yuv文件夹
/ ?% {+ V8 m2 e& `; S  o- E但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
1 F1 M3 d6 E8 @% k/ ?ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:: q+ i; L4 E7 X8 R. u2 O
图8

% R* s5 C0 F, a0 x这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。
" Q- o; G0 c: O* c

/ d( i/ ^" o, Z& ^. ~7 W
图9
; A! f) Z- E" I; l) n" Q
此文件下有两个这样的地方不同,这里是指自动对焦模式。
7 _* c+ v4 j; [8 n8 a4 l. D 3 B& K: ~! x$ n8 b1 W6 h
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
9 n: i2 U* w9 H
( q; J7 h- U- t( Y% h; N. k2 H  j, E所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv
! C- _/ g- L. c, D/ Z3 ~; v
  T6 w3 [4 X6 P1 @+ L(2)  在支持的sensor列表中增加目标sensor  T; G4 n, i  u0 d8 w; [& M
$ c; C" ~6 f5 D: h  p+ \
\src\ sensorlist.cpp
% }5 G0 k: ^/ ?0 H! k
& X; x7 K$ q* L; f9 h[cpp] view plaincopy
/ k. s1 O- @- Q! i( ^' z
  {& V- j/ W. x8 r5 J
8 D$ o" |3 l( n; @0 w! [
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  0 C. L7 S- q( ^4 d" C( t

( z( \/ J. |8 o% ?  Z; j1 U
" ~+ ]. i" S7 g3 i/ C0 ?3 k1 Z" a4 a5 C' o0 S8 Z
注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
( Z/ g" z- q' s) H0 W. _% r3 k 3 j" z" h7 Q. D5 |
- f/ B& u  t0 V$ O
4.3  拍照图片尺寸设置
, I/ X3 E: W1 M/ y1 K
1 ~9 h. M( n) {- G2 m, Tmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h( M% H9 W, [# P7 L# G

& a  x0 I  s2 Z! D# P' V: F[cpp] view plaincopy  B; S0 E% g, F3 G  u+ o4 z5 b! x

: c) K8 p1 H2 v0 |# g$ S# ]! q& x% a1 Z  W3 \3 H
  • // 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  
  •    )  ' j0 w/ v  r& @% ~, P
% n0 T5 t' B. L9 r, x
1 B4 T5 Q; z9 c  T
4.4  Camera物理角度旋转
. y* W5 R, f4 |9 @- x2 ]  nCfg_setting_imgsensor.h7 S+ x# y# ?. Q/ H9 j
2 \+ I" @. L4 U2 u
[cpp] view plaincopy+ X0 z8 C8 [* x" U9 H  F7 A
" |" Z+ X& y0 }* ?
  x+ V4 _" ^% V1 W% n( u
  • /*******************************************************************************
  • * 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;  
  • }  : }/ z. t6 Q1 H2 P0 S- i  q6 ?8 D  I  G
4 x9 E% v: `# F8 ~) [0 ^
( J4 h6 M; ~1 ]! h. E% ^. E

2 I3 N: A2 I# a9 o- a+ u! ^这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror); D, k9 M( o" z8 v# C! i8 J4 F; D4 A* [
参考:http://blog.csdn.net/loongembedded/article/details/41679977
7 ?( K+ z2 S2 ~/ m3 N, @9 X( j2 }% ]! A , V3 I) \9 A7 j) x9 a

9 o; K) D! M8 i4 _3 k看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
" a! O% c/ [- U2 vhttp://bbs.csdn.net/topics/3908371501 r9 Q; e# O+ \) J
, y; a, ^9 B" O: J
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。0 E, }" y6 N( D8 v& T
  L5 l& C2 M" V# r/ O+ x- j
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
. c* v* d& e2 e( G* ]" X$ r
( [* F6 Y4 T* a2 O" ?$ y5 f[cpp] view plaincopy" h4 q3 }: X% s3 W' Z) d- w5 ?+ ]' F5 `
2 K( Z) _( h' D& I3 `

' c8 `6 r- A' }% c& b
  • /*
  •     // 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  
  • )  
    $ i6 ]) f% K2 y: r0 ]3 ?

- X: d. Z( h/ }6 k  Q  J4 w
0 H4 d1 r1 p% j2 h$ S! d. ^( k+ f$ u' u
$ t. b8 `4 B3 O$ i
8 I" O% w! F6 ]) F5 d  j
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
0 n, F1 a0 W. z) j6 P: Z
, T! o  Q( F( T) s 4 z# r( O/ I. h/ q

" w% A0 m/ O( F+ D8 ?参考链接:
, |, z. s: R% a" _8 TMTKAndroid Driver:camera7 n" t$ j) }7 E& k. `7 B
http://blog.csdn.net/cbk861110/article/details/17437283
6 A0 }: A: _0 {* l- b. ~$ C. T
9 v2 g$ U7 N$ H( p2 F: A ; m" p% o0 {  S2 |9 k
MTK cameraimage sensor driver
* ~5 }" @& {4 ghttp://blog.csdn.net/sunweizhong1024/article/details/8497790
1 e1 J* ?$ H% R
6 G$ [1 |/ Y9 @% ?2 ]; b8 GMTK平台的ISP架构问题
5 i% c" C4 e5 _& Thttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
5 z5 X: D2 d! d$ z6 I' h' x0 W- q
# D8 y5 X" X8 ]  Q7 eOV5640 YUV的自动对焦功能为何没有开启3 p. h& ~1 p: s( b5 Y
http://www.16rd.com/thread-10480-1-1.html
0 n5 q) x# L" o$ R  b 8 ~9 }" W7 Q2 a$ F
MTK Android Driver知识大全
' F2 u+ s( @: x  Q4 m6 Y) ~( k' v, Nhttp://blog.csdn.net/cbk861110/article/details/409318356 Y4 P, t$ @( D
1 K0 i7 j% e$ S
mtk camera移植步骤
7 r% d  O7 h5 ~# {3 I  X" X" Whttp://blog.csdn.net/vasvas/article/details/39250473" `, U$ ?3 I; K8 K$ X- j/ m2 `

+ A  L: W8 t5 |7 m0 `4 \( d关于 前置摄像头安装0度或者180度# I% p3 ^+ O7 A% n. P4 O
http://blog.csdn.net/kkkvvv123/article/details/8809823
3 B3 ]- y8 O) {& p2 ? # h3 V" i! S6 g" T7 m4 K
Camera 涉及的文件70' ?  V$ Q7 \0 j4 f- {* q% U
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html+ ?0 ~0 g0 p- A" r  ~; ?
) ]) E. G( s. Q0 P7 Q2 F( @
OV5640全景模式预览倒180度,拍照正常的问题
4 c1 C$ K. a& U) p: ~http://blog.csdn.net/guoguo295/article/details/21245815# f+ L5 ~- u1 K3 F- a

5 f* \0 G; ~1 l  Z' Y# f$ _  D# U
! K1 A. P8 v  f0 P7 K- k

  •   o- ]$ G1 a# W, D8 y5 P( U

    - @# @( z. L1 g
% Q( K7 M. x) z. i
* m/ ^- {1 W* Q: n- F: N
匿名  发表于 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|摄像头模组论坛网 ( 粤ICP备18155214号 )

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