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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动- u6 s/ ]7 L6 s/ o3 J

0 @, _! P0 k: _% |# q

4 a" ?; x5 x, |* e4 M; w" `1 a
MTK6577+Android之Camera驱动
6 q9 `$ ?+ C+ x1 b+ V

1 q% w1 d/ M) w
7 f" f+ h, ^$ e- k+ r
图1

& }0 H' n+ t. q* M- h1.     Camera拍照相关概念4 ^0 F5 Y$ b  E/ t! h6 h
9 B" F9 d. H( y
1.1  ISP
6 S9 Z/ G: v1 a  R5 b4 y+ m. v
; Y7 i  a; D. E- T* `+ k' p8 [isp——(Image Signal Processor)——影视处理1 i9 H8 O0 L: a$ Q

+ n- |1 o; r+ `# F2 m) n无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上, ^9 c2 T% {# f  S  s, K
, E  }) O8 z. l* H( Q4 b+ C) `
1.2  720p
! Y6 W5 G+ P" J/ u* N3 }720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。
6 B1 p+ o: E& n' m6 x
# i& Q5 ^/ ]6 E, P- Y% L分辨率为1280×720p/60Hz,行频为45kHz9 O, t* z' Z  `

8 O7 T& o0 }  o7 o7 K! r# o, A5 x- X
$ h1 r% g  V9 w+ P7 r% o, m: B2.     MTK6577Camera控制器部分1 p! }% n4 Z9 j) I$ c' q
4 ^  H, f' y7 @) J0 H
2.1  camera控制器概述
4 |1 j% F; Y1 |) HMT6577 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)这些特征,用于图像处理。% n% Z3 ]1 J+ k" P
( J+ }& S) k1 |6 U
2.2  camera特征: s5 m$ h+ h" v3 h" P
$ [3 s( k' r7 t8 g% u8 f  K( q
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。
, \5 H! L. P. W# T' n7 ?/ L6 g 3 }6 ?7 x  ], @
支持的特征如下:% Q( j& R' L3 V) t# O0 t' X
(1)   抓图分辨率达8M像素(image capture resolution)。  g+ {% f2 M( ]. ]4 V
(2)   录像分辨率达720p(video recording resolution)。$ G  Y! m5 I$ |3 |$ y
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。+ G7 C0 P( }4 \  {6 n3 H; L. R
(4)   曝光抓图率8M@7(burst capture rate)。
$ g% L% L1 E* s# c6 x(5)   图像处理  Z: o2 j. q1 H
低像素补偿(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)。
$ K4 G! ~2 R' @) z
# Z0 i0 c: ]" F6 c(6)   3A统计和校正(statistics and correction)
# U2 p5 \8 ]+ V& s/ P4 J(7)   闪烁检测(flicker detection)。" ~& b. D* }; o# N5 s' d% V9 x

- T, [" E, N8 G% y. P- o2.3  camera框图+ p9 ]" }, r8 N8 J9 S

4 `8 a, i. e: I8 n9 ~
4 M+ G/ j0 P& d2 `5 ~" H
图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)单元。
  C( ^" |% N- o! z5 N. _. q: m& F. E
0 y4 f( o, o/ I$ L/ Z! K' m在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
) j9 ?% b; _- M" `5 A4 P
; f* [0 |4 L1 P$ i色彩处理单元接受来之镜头/传感器补偿(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读取出来。
/ W5 h" k, k- ~8 o4 F/ U $ V3 O* s0 o- P+ {- x
下面给出一些性能参数:
$ w9 j% G( O# F7 Q0 d1 T: @3 r

9 W& S$ i% s* H0 x' _' z9 g

' H( U  s- h3 }* W1 ]/ {
图3

( x2 J) R( n) b! a+ m8 a9 b3.     原理图设计- i: M, K$ E: |, u2 L, B! j% Q

/ J' @# V0 u" FMT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
5 W3 C4 E; v+ [' ^1 L
% k: T/ k( e, P

' f% J5 k4 n( I8 t2 U$ ~
图4
Camera sensor连接座如下:" p5 a" `6 U* t

, M; F, z( g( q+ r% ^. h9 Y
6 M/ S2 i5 a- n2 l1 s
图5

& ~/ `! N7 o, ~2 E- h4 e1 C(1)  OV5640输出的数据格式
/ c2 l# W0 t$ M3 G$ J/ |) u《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
7 ~, T+ h. Y6 q. o6 ~1 `3 gSensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]# P" {" B, V- N3 ^& v) q
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
3 D+ P# B, D; G- z4 G# z1 K+ j2 r而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
# h9 X5 D  X  s6 J6 ~
/ l3 v) o) @$ N
2 {% v5 M8 z* h
图6

& T8 ?% B+ A; e& z, |0 C, k$ D ( m, B" A4 r+ L) T( f
(2)  OV5640IIC地址3 \) `! k4 j, b% {, i- v
' q5 y. }: w$ f* n2 B6 m6 F
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
9 }" z* S* R2 ~/ S: S! q

- j8 l" r( h* A. N

( X, g/ J- ]7 ?
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
. o, c, Q. t' w# v 8 Q2 D. s, C8 q7 D6 z
" t7 u$ ^% F, q! [4 K
4.     驱动实现" m8 M, f# x* d" I5 D" \

' G- |+ I! C  Q6 Y% Z3 m $ k4 D. x; H2 e# X
4.1  相关代码
1 X' r& Y  O8 l& W  ]& M+ u# M# W; ~(1)  CameraSensor驱动相关文件
) H" s/ g7 _- A! {\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
# w$ x5 A& C' Y1 T% f2 o
0 o: s- b0 E. n  r/ U+ |) q(2)  SensorID和一些枚举类型的定义+ v( j. s1 M. _8 J& D3 X
\mediatek\custom\common\kernel\imgsensor\inc0 F5 l' C- B3 X9 j+ e- ~  O; Z
kd_imgsensor.h---------SensorID1 W" B! y9 l8 r+ k6 ]  X: S& Z- u
kd_imgsensor_define.h--------------一些枚举类型的定义; S* S- N, U+ I  d7 B" Z
: H- u) [, V4 ?+ F6 J
(3)  Sensor供电
1 q# c; ^& p  S( _1 Y7 H% z9 E\mediatek\custom\common\kernel\camera\camera: g( y! g! b7 P. N
kd_camera_hw.c和kd_camera_hw.h
6 I0 w1 T  z! o1 N
: c3 w. r. w8 L  r(4)  KernelSpace的SensorList,imgsensor模块注册
- N. w. O! S8 }1 T/ \1 y2 }\mediatek\custom\common\kernel\imgsensor\src
4 Q/ ^9 b- X+ D; r$ Q6 p" Dkd_sensorlist.c和kd_sensorlist.h-----------camera模块加载
1 K4 a4 g" I  |' p2 @ $ z7 g$ P1 O; K- C+ o1 ~& u$ d
(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
! M. v, X, [" `  o\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
9 ?% N% E0 g: d  D3 |提供给用户空间的SensorList
) y8 w/ n  r3 Y& |  E) Y, c1 D
  {5 {5 X2 g# X' x0 j- N
8 W5 a4 G' z' q" X; z(6)  Sensor效果调整的接口
" o( z8 P& X0 \( M( d5 q\mediatek\custom\common\hal\imgsensor\ov5642_yuv
4 R  H. U) _* I
& J: O6 M/ i4 \3 t  L1 [
! t! ^9 W, B: K/ s4.2  针对OV5640的修改) `1 C7 K- p' q8 g7 d* c5 Q

" Q  o. T% F) {5 a+ h4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk5 s5 a1 y; ~: U+ D) ?9 x) m4 I
& F$ ?0 S9 `0 C4 e
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
) I" ^2 |# n8 H) z3 y" m, x/ Bmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
7 O. A5 X" m8 a" ]7 ^ 3 p; I5 t- b* |: O( S& f
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
4 R' H9 U% p4 d- X7 O% F* {
( _" o3 S: [# i* \6 u% l' d& s8 x我们采用的OV5640就带有ISP,输出YUV格式1 m* h" _7 K+ ^4 ]

  f  ~0 T1 R, A" [(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头& L3 m' ^5 q; I( B( G. p# m6 f
(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
& O0 o: n4 i. q1 U$ B2 w
! n" z8 a6 G! ^% s. f6 r修改之后的HAL层的配置:
6 i9 {3 h% E& l; _$ o! ]* C4 @- w3 W5 R7 b' l
[html] view plaincopy$ i( r5 W. a5 e4 p4 h6 q6 F
* H' h: O3 o' |

5 j* \6 q/ N3 d, b& s& F* V1 S) m
  • 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  
    7 A4 X$ h2 G2 `; k
, I5 X' ?7 G3 L
7 c8 X/ E, |$ n6 m

: ?- r3 R* R- I; |修改之后的kernel层的配置:4 A+ N. ]: O- B
3 o! b9 `( H3 s' q/ U& y4 [, ]7 Y
[html] view plaincopy1 ^. s( H4 N( n1 q. D$ j+ G

8 v1 Z, D5 e! R6 w0 E( E. ?; V2 K7 b8 h- c7 ~' j- W; f) H' ]
  • 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  
    6 a2 _3 e' i% S. F5 G7 Z6 H  l
$ [: |5 @0 P0 {( r. n

) ~- D1 l) s$ v, N9 k' e# d" D% i8 n4 ^3 N2 w3 W" ]# d

( |) \$ f# ^+ u" R虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
. R! ]' p3 s: K. }: K- C3 j5 _, w7 F6 Z$ u" {
[plain] view plaincopy
5 i! g, z0 }9 D. l5 z
. M/ o( q% h# Z# m# _* K: ]
! c9 x2 M2 n% H5 `' m! A
  • 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# C* b: N" \* ?6 S4 k

- b7 z# N3 Q4 t2 Q# q5 e3 L9 F. o' p0 C) h  I; A
7 S/ ?( y! M# k8 |

- O$ w% |" |& V4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
6 E8 Y4 y, B1 |
' Z$ a2 I/ i6 m* N(1)  创建ov5640_yuv并建立需要的文件
. E3 G, x& ^  S- g9 L4 {
8 h: I" J! k' [! [) |$ H创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。" e; S6 B  t, C( u

8 d5 x3 @! p7 O* x; N  C# h编译发现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是没有这几个宏定义,我暂时定义如下:4 J" F( k! k0 f5 F) x1 }; G. L

" u; X7 C5 j1 s0 E7 M* P[cpp] view plaincopy& {% _' o/ w4 r; a- Y0 Q2 M

. i. K+ X/ Z- K4 e6 t
+ W! z: O: R% h7 r# W
  • //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  
    ) o! u+ M/ o0 f
9 p4 X$ _7 d1 r3 e# Z1 A

8 H! j6 `+ s: t0 z5 `  H7 t- J5 m4 X/ ^  Y
这是参考ov5642的相关定义来定义的。+ h0 H& c- S9 {* Q' I+ |$ ~6 s7 ]
1 S" h  x% z, Z
(2)  在支持的sensor列表中增加目标sensor
0 `8 A6 |, O2 i
# `$ h6 W) O! }# A% ^& ]2 B: Kmediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
8 R$ s$ I# Z% G6 n. s# {+ W* H在数组增加OV5640的内容,如下:* _* o' F7 J0 o& b, q3 N
  a3 p8 w7 c% u6 r) N5 U
[cpp] view plaincopy
  K2 o/ \, V2 H4 g8 ]% \8 F% v
6 \' H6 B7 S0 I) y/ x9 h

( g' Z9 |3 q, G" a1 J/ L+ ^
  • 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  
  • …………….  
  • }  * B+ w  j* |9 x9 e" P4 D( E1 r

9 v$ K# Z4 f7 x8 J4 B7 g! e  d; J4 `" h
( u0 i' L* Y2 s& C/ Z
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
' z* ]3 o# E$ t1 H1 u0 T* |. |mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
6 E, x- u# d* }; L! o' @/ a+ `   v: a9 W6 W: T' V7 A2 w' i$ E
(3)  增加sensor ID和字符串的定义
4 [1 E( I- G# M5 U# B$ v  j
7 t) b' z/ w# Y( ~0 A  b[cpp] view plaincopy
0 A, n2 z, [  v. P

! D, M# N! y  S& A5 v. I) y9 b+ R4 L- U/ G" V, T7 B
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  ' B  ^# t5 D/ T8 a+ y
8 K* k/ b/ {" L

* E6 T) a$ K: s- ~
( Z4 e2 l+ ?& e0 s& I* X9 H3 i4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层. S6 d/ j' B# M2 g0 p( s! k

; J7 x7 u: r# k9 A9 U6 r(1)  创建ov5640_yuv文件夹: T" d" @+ X9 N, M# K! z. K
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了6 Y, \1 S8 x( h7 c
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:: ~3 v* c( D# _& ~) ]7 W
图8

' ~9 F1 v% y* x4 ?1 T1 d这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。
; t+ _+ K/ b" r- S! s

+ k; f+ p% p- P5 X8 d1 b
图9
$ p- J: W: j3 C/ z
此文件下有两个这样的地方不同,这里是指自动对焦模式。( }3 |- x3 m% F9 C

( S! M0 `5 s4 {4 U$ i% f+ E" N& u; F因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。: Z. ?0 X% t, M3 ?* V$ k4 l
4 D  P, h4 X5 G0 Q) K* g* W0 A
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv
7 g0 O' x9 G& U( f. D; U% ] 2 O; \/ y, c$ x3 f
(2)  在支持的sensor列表中增加目标sensor
  ?$ t, M$ D( a9 L ( C- y% y; Z$ }, v6 k" |
\src\ sensorlist.cpp$ k( [/ Q, o2 h- u& X% {8 G2 a

* O+ g' m; j( F4 Y% t[cpp] view plaincopy
+ s" v2 X. F# Z1 |) H
7 O. O+ u! I6 c+ ]: J% _

6 F& o. n, V7 J% ^9 `
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  8 W& E4 W9 A% X) _
: K) N! Q8 h* y; ^8 X' D

+ A. [* J& W( x% R' K2 B' A; }7 @  e# E
注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
2 r( l6 W7 L- S. H! _* R6 u
/ n( t8 X* T* K) d; Q2 }* O 5 |1 K9 f/ X7 }& m3 n# \% B" k
4.3  拍照图片尺寸设置; g' P) o- n" [  ^3 Z% s
( \( M: v' `$ n- c3 Y  D
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
1 T. w' a% S$ l% I( ^
. |+ X+ E0 `# h[cpp] view plaincopy8 C) H$ R. j. E3 _- N+ |; }

# y3 v2 S& L/ E& d1 z
& z0 ^; {6 }- ^4 S. g8 s3 p
  • // 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  
  •    )  
    4 Y* N5 U1 M- b+ |+ T" ?# t. A
0 y' N  ^+ J& _3 }+ L; w: q4 t

& `- j( ?" I  q+ e. N. W0 }4.4  Camera物理角度旋转
5 z0 h1 {+ [& \+ iCfg_setting_imgsensor.h
2 d! r: J( a; }0 S7 o
" V4 }# h; k4 W2 U* W6 U5 E[cpp] view plaincopy4 h" u- F  t; c3 R

9 e9 M8 P( @9 b" e- X/ Q! o
3 h* q% M; [0 t9 ]" q  f
  • /*******************************************************************************
  • * 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;  
  • }  * R5 [9 V2 Q1 e# O

/ G# X  c' ?/ \; T8 Y/ E; d% r! E4 \! P! N7 A' k
8 Y7 r3 A4 g  ?! t  P  R- i
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)2 g% h1 c4 k$ J5 q" V
参考:http://blog.csdn.net/loongembedded/article/details/41679977
, G4 @" [9 `. \( e
* g. U7 `2 W' a9 Y
' ]) O+ E- `* \6 `# `
看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
6 b# i, [* F5 c. j+ I( Thttp://bbs.csdn.net/topics/3908371505 D5 z- ]3 y8 q( N* w
3 {! K5 W* O. L
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。
" J2 g  x0 \, T+ O 0 R4 z6 w. O2 r9 c
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h- i7 N0 p3 Z% J6 e3 y$ w, A

2 g) G' h- k9 k  o[cpp] view plaincopy
3 Q( |9 m, z# _& B# m( Z8 L8 I

2 `9 ~7 c2 N# [6 R* n6 [5 J
0 O$ t$ h/ Y, Z' a/ D
  • /*
  •     // 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 n2 Y* T6 o+ F6 T6 k, i

# I" u7 J2 C. E4 j- k; Q* a+ A7 R4 f6 y* ]$ F

6 J1 ^4 x- Q2 p8 ]. q5 S: g( D0 N0 }. N
$ x3 Y: F( o4 R& p
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
$ ]& B6 [% y# ~ 9 m/ ?9 N  ]5 o0 L  w& h9 Q- D' Y
1 Z! q0 x+ ~% |6 z* P! O

& ~6 D' @2 {7 b& y6 h# ~, F' N$ W- j参考链接:
" {0 `- k7 b$ c# _  l4 ZMTKAndroid Driver:camera
. g; ~; R8 [, G$ t. {, I' M! N! k3 ehttp://blog.csdn.net/cbk861110/article/details/17437283  m' M* ^" s2 b! C- a  O. h+ x
' C! A' H& E  ~1 o/ y8 Z" Y( H

7 H( T5 H7 j4 }" ?) qMTK cameraimage sensor driver
6 U' N- M: w/ i! M, whttp://blog.csdn.net/sunweizhong1024/article/details/84977901 x! p, M7 B. l  U: \

* M9 G! z5 h+ }! r0 u  hMTK平台的ISP架构问题7 O$ L& i* H4 K2 R9 ?
http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
9 j# g* K6 b+ H
0 L$ X9 r- _9 P! Q. ROV5640 YUV的自动对焦功能为何没有开启8 d/ `' R& j% a1 I' e6 j+ t
http://www.16rd.com/thread-10480-1-1.html
( B0 j1 @0 M8 O9 q2 `
2 u* g! q! v9 c- g6 `* `MTK Android Driver知识大全5 ]- [4 O% {. @. C, B, m  R
http://blog.csdn.net/cbk861110/article/details/40931835
7 s5 V& C' p$ z$ Q, z" q: F 3 P/ n& L9 r3 L+ S% Z, I- _( t
mtk camera移植步骤
! Z& Y) t' [% uhttp://blog.csdn.net/vasvas/article/details/39250473
8 v5 o5 B1 l4 J) E4 _2 p5 t) V 6 }' G0 p+ H- X) j, G7 z
关于 前置摄像头安装0度或者180度
/ B5 Z: K& f8 L# b: U# t9 J( T* ehttp://blog.csdn.net/kkkvvv123/article/details/8809823! l( J! t' C# o

1 j9 b+ @! P$ `; e, T( v5 }* \: fCamera 涉及的文件705 |' D7 y5 I4 b8 m. d. N; {
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html9 w# |' r$ g& ~2 |8 F, t

! Z. h" [3 O+ |0 yOV5640全景模式预览倒180度,拍照正常的问题
' f6 S% B/ n$ y- T2 f" U( N1 B( Dhttp://blog.csdn.net/guoguo295/article/details/21245815
: w% A6 x! n0 _% l; l8 p& Q

. b' h8 K2 ~- p" t, ]/ ?! {% G  f+ X' S% |3 Q% t8 v: U4 p) P
  • 7 b$ s6 M. U' \
    ; A' a8 r% m) y- |, x3 f/ @

0 R2 S1 H7 ^" l8 D8 m" L0 X# U: |  T, j
匿名  发表于 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.