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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动5 P2 o8 ^, p  Z6 }

# i9 ?0 d( C: F0 ^, G. t$ x

! ~( J: f& e7 L6 H
MTK6577+Android之Camera驱动
. _: ]* B* t: k% g% r/ C$ N
, p* ^/ A; o. k6 i, j

! e5 Q. [' @( P
图1

, r- {. J+ b3 U0 _; Z$ B1.     Camera拍照相关概念( w5 A) `' ]5 N) m5 H- a( T' Y6 D

# z, u2 r; l* p1.1  ISP
9 d8 u  F9 u# P9 L
  K+ u0 q* P: p' W+ Gisp——(Image Signal Processor)——影视处理
2 s7 r1 q% j  h5 _3 X * ~* X# ^7 t  Y7 a1 c, n
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上& w; {6 P1 ^" R7 H: x( N$ k: J
0 j- h' y# d+ I
1.2  720p
* O& o( b( W: h720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。
# i* }2 w3 ?- M. u2 C5 m5 i! V3 n, T
6 d9 r+ M4 k$ [. K) i* @& y) w分辨率为1280×720p/60Hz,行频为45kHz! t3 N! v" \. k( f- Z
4 @8 x2 G' T8 A4 P3 x. M) a
7 N* @# C* J; E
2.     MTK6577Camera控制器部分6 A% j* Y: t7 p9 P

7 E( ?) O) k% X, }2.1  camera控制器概述9 I7 P4 g( P% G+ ^! N( e! m8 n
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( V3 q5 R' g' z7 I
9 c' _0 u& Y5 z3 B' t
2.2  camera特征+ ~2 t6 M: P% e5 W" k
- |% z* p5 Q# @/ u! L
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。8 L5 I9 M! h3 ~' ]

7 w& C3 s! T( P4 @  M: r/ k1 b支持的特征如下:* {: q. t% D- M! {& C5 n
(1)   抓图分辨率达8M像素(image capture resolution)。
, z) S- D' p  [& g; _( B0 I; P(2)   录像分辨率达720p(video recording resolution)。# u, r/ `' A2 D3 N" T# Y% r
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。0 Q; C) z- q2 }1 R; Z
(4)   曝光抓图率8M@7(burst capture rate)。
6 A; j2 X, L9 U# S! D4 d1 S(5)   图像处理
2 R; Q+ [' z% C低像素补偿(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)。
& a* E, Y  v9 S1 }
: s0 y4 a3 Z0 o. R% m(6)   3A统计和校正(statistics and correction)& T2 Z7 `  L' S* v
(7)   闪烁检测(flicker detection)。
. V, H. _8 S- i2 Z! J( r& {9 i 2 S2 `: s& ?! J) {; S
2.3  camera框图3 D# G/ U6 }( T# U, C& r: r

7 t/ A/ D* N0 L, l# j( @9 z# c

& [5 m  m  {1 [2 Z' e
图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)单元。
8 P0 @" I. K* N 3 S& A1 K6 ~& e( x# L
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
/ q/ U8 @7 Z- ]5 `% P
$ _! j+ j  n9 v# \色彩处理单元接受来之镜头/传感器补偿(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读取出来。4 _9 v* a8 W0 t; F
, g/ I  L) o9 O* o' \
下面给出一些性能参数:
! M! k+ h: t5 x; M! r
6 L) R" Z- S" W% [5 R# ^% u1 F0 B
1 x' g  z( U+ U( t0 L
图3

$ S4 Y* I; E3 c$ V% u7 M3.     原理图设计, {0 N& m6 y1 S4 }
9 F; s" |" p) q; s5 D5 Y
MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
1 F9 @( N2 V2 w' z

3 m. W4 ^3 c% E1 H
8 N& m9 c4 z8 B& O: J
图4
Camera sensor连接座如下:
, ~. D7 r- K+ E- n) ~1 o- Z

* }8 q8 v1 X/ f+ Z- R

) {+ b0 F8 ]. K
图5

5 Q$ ?2 Y7 i$ _. k( `; v(1)  OV5640输出的数据格式/ `. W, @$ h# j8 I
《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:, k+ L" Q: ]9 V' f$ y. |7 x5 T
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]+ e5 w) ~; O7 t* k
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
0 y* C2 F. T3 ~$ P/ \而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:; X8 q* X/ ^0 o% A. O; D
6 i/ H" \9 U+ c0 x7 q0 ^2 p/ G
' a4 U- j- M- }3 S- K9 S0 F- w$ v8 E
图6
1 W- ^' q% c& z1 [2 ~

2 p3 ]; _5 F! a* D7 z  x0 [(2)  OV5640IIC地址. x- E5 R1 A. k' L) ?
& ^. m$ r3 @$ E; M
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
! j# a. t( H8 e. E
% i" N0 u7 n4 M! m
6 D1 q  u/ f7 T- g3 c+ m
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则4 {' E: n& {; o3 M
2 o: z$ U: E4 p* G
1 {5 o( {7 M- o) d9 J
4.     驱动实现
) W  o3 H2 u/ M2 a9 Z, d
  ?# t' x4 O4 |$ @3 w   H9 S! o1 }& A1 l3 W0 ?% m/ z3 h
4.1  相关代码
1 H' p3 J0 [; _9 J(1)  CameraSensor驱动相关文件0 h7 O9 p: t3 J- ?2 }5 E) k
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
6 i! B' E, Q, A6 l: [% G* p
5 ?$ S- K/ n, e* }; B8 W' X(2)  SensorID和一些枚举类型的定义8 S- P3 C" R: y! D
\mediatek\custom\common\kernel\imgsensor\inc% J; w5 d9 H: P, U
kd_imgsensor.h---------SensorID
9 r2 U# Y- E6 bkd_imgsensor_define.h--------------一些枚举类型的定义2 e8 Q& ?' z1 W
& Z3 i3 I  y# C" G
(3)  Sensor供电  @+ p6 y( _! a8 s$ j, e0 o
\mediatek\custom\common\kernel\camera\camera
& n( u" B) ?' H2 y) Hkd_camera_hw.c和kd_camera_hw.h
2 C' o* M1 u# u8 E 7 D4 c4 t' _# U  J5 n
(4)  KernelSpace的SensorList,imgsensor模块注册
3 O: X) p1 ]% U3 S- v4 N$ _\mediatek\custom\common\kernel\imgsensor\src/ x: r) F+ b/ K% h) |
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载6 i, X# B. o6 q4 T

" O* P: v/ C# z( s$ p(5)  UserSpace的SensorList,向用户空间提供支持的SensorList5 N/ }6 o9 r+ [& {
\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp; |5 p" W; B( ?4 y& e% H1 d
提供给用户空间的SensorList* Z5 j5 E2 _/ [

) a* L' ^' @: P3 @/ z
0 E' o2 j# [. i0 I/ ]7 x(6)  Sensor效果调整的接口3 X! B3 |* S/ R2 d1 a
\mediatek\custom\common\hal\imgsensor\ov5642_yuv
! k' [5 d1 k2 I/ d$ o/ |* l ( M8 y+ T6 B$ O7 [
$ h. @) R/ r& {, ]
4.2  针对OV5640的修改
& _% U' T7 l% e, F( M ; _6 d" T% T. h$ V# j9 z1 @4 ?
4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk( R" [5 r1 T: f3 C# I0 p
$ {  H! Q. i) W# R( L
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
% @5 \" J( Q" A5 R5 qmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
8 J5 t3 x5 g+ V. g" v4 g" W* y6 h
$ q* {6 p: c- H8 d  y# U0 Ngc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
9 C* ]9 |+ @/ E* q2 E
% i: G* j. k, O# l: G0 D  M( V6 r我们采用的OV5640就带有ISP,输出YUV格式, A) o1 ^2 G: |$ |8 c9 R
5 q7 Q$ n) W* q* S1 u
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
7 t* c& ?: ~9 S, \/ U( R' g(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
. Y' s8 K8 m# K) w+ w- d 1 z& s1 h/ E8 i  m
修改之后的HAL层的配置:/ W& }% ?  x/ z4 A' d" ~1 Z4 Q7 m

; y: B1 d! i$ K4 z3 v% S! A# Z[html] view plaincopy) h( p$ N- Z4 n2 d

( [& l* e( q* w9 M0 [
3 c, O  Z0 k5 y* ^: j& Y+ C
  • 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  / z; O4 Z# P* H; s
6 O5 K$ f0 [9 f- L8 o

) x; p2 J" ^5 W7 \6 [" M0 c( B( G5 i( \! }( D, @
修改之后的kernel层的配置:# j( u- f# B+ p6 f

7 r* j' s0 p& g7 n# D# r[html] view plaincopy
7 i+ F9 Y. L8 @5 ?* r! F

; N) C( T( Q4 t/ [4 a
1 m: ]) E( _, S# w* Z4 u
  • 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  
    ( [: d, F5 }  I8 i2 e' \

( T# }$ i$ j. T: ]/ m/ T# P4 C: q1 A
2 D4 b2 d5 U2 r$ T1 i1 _
6 |( _8 f/ z# P1 d7 Y7 l
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
) V" h3 z0 [' {" P; X
7 a' S' F* X: V6 G7 E[plain] view plaincopy8 X3 ^) S2 `$ o' K
2 S8 @! O$ u! a  e7 ]2 I; g2 K
$ {4 }0 H5 n- {/ W; D; \6 C! 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  
    0 t1 j  E4 l1 L6 J  U
/ U2 ^5 X3 G4 @
/ u1 z0 P% s" x# r+ r1 d8 O1 Z. n- ]

9 I2 A  o: u, p& L0 S! @% n1 P$ `) ~9 j
4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
+ \1 X' ]* e0 F) R" X   V. h" g3 ^+ y6 D0 n+ O: ~
(1)  创建ov5640_yuv并建立需要的文件
. G* L- _1 P$ T, o' |8 u. a
# T4 @8 p/ O7 B& {1 X2 `  M$ ~创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。
2 g7 ^' n+ d' {; ^
- {) l0 t6 J2 S, @5 k编译发现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是没有这几个宏定义,我暂时定义如下:
# f5 o2 E  ^7 F7 }9 |; R+ i; ^4 C5 `' A9 i
[cpp] view plaincopy
9 L( y3 E. ^- e. u& b- A- @
' a- L- H5 |8 {# ?6 T
8 ~- b% e- K! o( B, `$ v0 Y
  • //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  
    ' m$ x1 k0 e: J( k/ |

0 K9 L! ]* |5 v6 I- f
5 ?1 }) b3 I. L/ R; d0 j( f3 G# e7 d& x+ H0 P9 M. N
这是参考ov5642的相关定义来定义的。
# m( e# t9 }* n2 U7 `$ } , F# W8 s% @. y+ P7 c( P% u3 N
(2)  在支持的sensor列表中增加目标sensor  Q9 Q5 ^: \4 ?8 J
, ^# ]7 t8 }% V
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h% p5 ?" f$ i( _" L0 I1 ?1 W$ s5 o: E
在数组增加OV5640的内容,如下:
' E, k* g4 X+ P3 |+ J, X4 E" O
+ V5 T& J. o. [3 s6 k8 D[cpp] view plaincopy
0 i7 t! j  @5 q1 r: o2 e2 Q0 `; h

- {$ Q* @& W# S0 p- F, ?) q3 ~6 ]8 \2 v; x7 B
  • 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  
  • …………….  
  • }    N8 _$ ^( E! Y! E1 k. v9 f
. T) I4 @3 P4 H8 V5 u
" D1 h  I8 }( H  L1 F
: s9 o; B& g2 k( q) {; b7 j, s
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
. V4 f6 y1 Q8 R) fmediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
! d2 z5 l3 w. V, p5 f! c & j$ p1 A  j1 [" _/ `* _& W  b
(3)  增加sensor ID和字符串的定义: p; V# ?9 m4 `, t( `3 H; ?

4 D9 V& i" L6 y! `8 w" l[cpp] view plaincopy
4 e0 q) \+ |! i' ]) S/ P

5 M! c3 u5 c: \/ ]% a- Q
7 `  i' I  Z) D3 T/ _9 r
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    + p2 k+ t% K/ U0 t8 U, r

* V5 t( |& U2 [: ~( Q7 k% B- q$ N3 e0 ]: q. G2 p* s

. x4 S# L" I9 d3 @4 r4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层# P8 Q3 s/ L& A, }

1 Y* ~3 Q- f8 ~& {- q4 t: D: S% V0 p(1)  创建ov5640_yuv文件夹
2 h6 ^  D2 F' b& M4 K' }" ~  o但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
: |/ \5 D* I& x2 y; D/ Y4 e! jov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
& v' c9 k* Q! |
图8

' s4 d$ }( i' Z  i6 l这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。
# o0 C0 @4 Q) b$ G$ E3 ^. H. U

! C! C* L( i- J0 D
图9

- K' m9 g" @  ]* v+ y6 K$ R. P此文件下有两个这样的地方不同,这里是指自动对焦模式。
  s  z; e- S. c1 f, x( s8 C' A
; s& w$ F7 D- G. ~3 ^4 Q6 M因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
3 g: Z: J8 m! y9 {! c3 x$ N& B. @ * l( k* j% o. x5 a5 s8 [6 T0 T
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv9 E9 f$ x6 T! k; w1 P) t* x  C' ~
# W- L* X" p3 Z3 I
(2)  在支持的sensor列表中增加目标sensor
6 T6 j4 r2 ^- R& {4 V. j
1 y" D3 l  M/ Q9 l: ~/ {\src\ sensorlist.cpp3 {" t) i# E8 F4 O* }: e
9 C" h4 e& @. G
[cpp] view plaincopy8 _6 `+ }  V1 I% v4 l. z, G* y$ @+ p
- E- Y5 U  z. G- Z+ ?& E5 L
% a, q% M$ L, U8 L4 Y+ K
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  + m: t# _8 ]2 n" `4 u# w
/ g  u# z+ [; V7 g6 ^1 G; l& a

; w5 d! Q) n# W, t6 u+ U: \
5 z  A, \0 B% {注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
( F& f, [" a4 h8 |8 L& f: z+ ? 9 Q  m* U% i5 d$ M/ B

4 {6 P6 l, x! {9 a3 C$ {/ @4.3  拍照图片尺寸设置
; t8 o, F, k% H+ d0 y# Q
/ p+ @+ f0 ?) T7 l0 Emediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h: ?, i" I% }$ p/ \' Y; r0 z+ C
' G  h0 p8 ]* t' c1 M7 D" T
[cpp] view plaincopy* r; P/ n* O: u3 R- u5 Q; G5 v
( X" A$ f" @* B. R

1 S3 g* g, N! i& B- ]7 \7 M4 a
  • // 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  
  •    )  
    & j+ L6 ^$ i5 \% v! N* h4 s

5 j' S# Z+ \& x$ J
4 x0 C! B2 U( y+ i7 }9 y) o4.4  Camera物理角度旋转5 G. w4 H& m2 _( b, O: F0 q2 k. O
Cfg_setting_imgsensor.h
6 q8 w# H4 X( f( N5 ^) P
, \4 v: D2 Z5 ^% [# B[cpp] view plaincopy
2 e9 R4 P6 E5 X  O. F1 Z! z7 I
7 [. D7 |1 h0 E8 Q% O  |) a% G
# T( G, R. X% u& X% k
  • /*******************************************************************************
  • * 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 x: V& t+ J/ i0 m6 _& r! f
: o9 b  m, d9 o# ^0 e* v( B7 {
" H9 U6 Y' V8 {0 N0 B% g3 V

# B5 `! t7 L: ]( u3 s这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)' a3 ?3 B8 `( |& I2 F) x
参考:http://blog.csdn.net/loongembedded/article/details/41679977+ A' l/ g2 u2 {6 ]/ O

8 O+ r7 \" Q: w( c

3 }" V! S- v3 M- T. ]0 A/ }看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
5 G0 c2 Z, \  ?( `3 Y4 N: xhttp://bbs.csdn.net/topics/390837150
# G1 S# y9 P9 x3 I
$ \. g+ B! @7 I5 x' E可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。
# G! x8 I: z* `6 [$ @ 8 R! F* h4 A4 N) @+ P9 p2 a( w8 b
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
+ t' v* U+ X) w/ J" b. Y8 A, a& m& O6 E& L9 M
[cpp] view plaincopy
/ G& C% e7 J5 B; Y
- G  s$ q* R# i9 {
% y% A4 m0 g0 @5 W. k
  • /*
  •     // 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  
  • )  
    # [- F8 F1 F$ a) W2 R

. E- b5 J1 k% q2 ]2 u
- `* Y) X5 l1 g$ A& j/ u. o0 D" {$ P8 ~) d5 S$ l

0 M( r; \' A& w1 j$ I# ~ # l7 U) U& l) n8 W, ~' G. }8 ]) n
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
" J3 S4 ^! |7 H7 q. i ( f( ]  C2 k* W+ s* t" w3 x" ]
) ]5 s) m( v+ E) S# s  d
9 N9 o: \3 |8 f3 s
参考链接:
8 Q+ L' r$ v7 O" t& K* h6 B; rMTKAndroid Driver:camera  H' P# c. |4 o
http://blog.csdn.net/cbk861110/article/details/17437283" y" U. H& I. b; e4 J7 Q) @

3 J/ s  O. E3 F9 ^/ G, t 2 A0 H" r' N" N# @6 e+ t4 m1 K$ T
MTK cameraimage sensor driver. H6 n$ I' ]. N( G0 z1 ~6 a
http://blog.csdn.net/sunweizhong1024/article/details/84977901 z; z8 S' {: h. K" ]8 X
* ~3 e0 J( |/ L0 J
MTK平台的ISP架构问题5 _# U+ u# K/ J
http://bbs.52rd.com/forum.php?mod=viewthread&tid=2727272 L- A/ s2 K" t: z) @- G; U# Q
$ c; ?/ H# c# X
OV5640 YUV的自动对焦功能为何没有开启: p+ k1 E* l& E. p: g& u$ [$ y$ E
http://www.16rd.com/thread-10480-1-1.html
: }& q, e$ z2 n" Z. `% n" O0 w* [
2 U4 \3 t' x- z7 ^0 b# HMTK Android Driver知识大全' _0 i! j9 `/ }+ ?. H# @
http://blog.csdn.net/cbk861110/article/details/40931835
% y. g8 r0 K2 S) m
8 m  |' p  C0 F2 J( fmtk camera移植步骤+ c) i+ k8 h  z9 L" W4 l# @. X
http://blog.csdn.net/vasvas/article/details/39250473$ p6 w9 S  a+ U( d" {

3 P  r6 x3 p4 m关于 前置摄像头安装0度或者180度
8 K0 T. E9 r) o4 G( q" |9 ohttp://blog.csdn.net/kkkvvv123/article/details/8809823! h' T. D- d- |$ T

: P% A; b9 }2 ^; \, h0 S  FCamera 涉及的文件70
5 r# {) U! s1 v2 Y! Rhttp://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html! ]; b8 z$ J( l0 }

; y/ N. t' z6 dOV5640全景模式预览倒180度,拍照正常的问题2 n$ o! Q. J/ ~, P
http://blog.csdn.net/guoguo295/article/details/21245815/ G2 Z( T: n0 n9 q% H6 A3 f" e# b
1 G. y6 L5 h8 D, M$ ~4 ^4 E
& i. ^% L) t. P/ T

  • , V9 P, X7 R! {( k6 {
    ) u: F! ]2 A% C+ j2 W+ [
! q; e: a; s6 R% ~
. n9 c2 o7 Q$ c  m
匿名  发表于 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.