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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动9 G7 R( q% d  ~( x9 D5 E# S! s9 X. ]

8 W' s3 s/ y+ h( D# A4 I$ }* }
0 e" a6 m. v7 [1 S2 `
MTK6577+Android之Camera驱动

2 W4 @$ q: U# I" ^

. c1 D+ p! A* p5 R8 ]6 [& ^1 F5 j

( }  p  m# S+ {, b' ^
图1

- R% e6 t! D6 D0 X* I1.     Camera拍照相关概念  `  W# u5 {5 K6 T4 l

, o, ]$ Q9 b9 j" \$ h/ Z5 g1.1  ISP
0 H% J0 J$ B" I+ h# ~4 R 6 j5 d) r6 v+ r* B' r, T, V
isp——(Image Signal Processor)——影视处理
: U. F, c2 d8 m5 v: J& B* f- G! \ & M" r# ~) P# ]5 k4 N! w4 t
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上! O1 S9 c4 i# B
( j* \/ _( x" a& A3 U
1.2  720p( q0 P1 S) i) p' L; Y7 {# }9 q
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。
4 n1 O) [- N/ W' c+ O" r 5 l) u* \- W' f1 n% K+ C
分辨率为1280×720p/60Hz,行频为45kHz2 R( i& d; K& {- B3 B5 }- ~

7 P5 \' H! O- A7 K) N, b! Q # Z1 K% k* e% x, V, f- G# F# r
2.     MTK6577Camera控制器部分$ n: c. k: E, l, |% S9 W
3 G; s: y& [& c- ~
2.1  camera控制器概述
7 {6 i, z3 \4 u8 P0 i9 K' A2 sMT6577 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)这些特征,用于图像处理。
4 b+ ?+ y2 t4 L$ \) l
8 ]" W. c2 v  O% i8 l+ Q2.2  camera特征
4 e# o. V+ ]1 ~6 k2 e' W
0 K& z; k7 h$ a7 t$ I. qMT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。3 f2 h, a; b6 \& A

) Q, _5 ?$ `7 w2 t支持的特征如下:$ Z( h" v9 q, s/ X- u' q# t
(1)   抓图分辨率达8M像素(image capture resolution)。
" f, E6 f2 U( \6 ?) f, O(2)   录像分辨率达720p(video recording resolution)。
  P7 S+ J) X) `  e4 @% A5 |(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。+ C' q7 ~7 m, @  ^
(4)   曝光抓图率8M@7(burst capture rate)。
* N  A: p5 s& U) G(5)   图像处理* F+ \6 t3 c( K5 j/ O
低像素补偿(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)。$ m0 r7 @: `. n+ Q. N
) e- X) W- K  G; V# f+ x+ a9 {+ Z& U* ]" L
(6)   3A统计和校正(statistics and correction)
; }: \& I. o6 q# z" L( E  c8 `" J(7)   闪烁检测(flicker detection)。3 g9 ~3 u2 C/ X1 u$ A7 `
" P# _7 B& f* |6 v/ ~; C
2.3  camera框图5 I- S3 C" F5 d0 m: q  V1 w7 C# E

" i! @& Y) e& Q4 f! ?8 h5 G* v

/ j9 m; J5 m$ m5 ~. _) N1 M5 |
图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 J' D. h7 N! ]: ~" ~$ K, T2 r

. F: ?; t9 c. j( y4 f在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
# s. I% v$ z" N; m3 ^$ Z& u ' F; g! b4 y) v- O$ u5 z$ `
色彩处理单元接受来之镜头/传感器补偿(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读取出来。
# I6 s* `3 n2 z6 t 5 T" |) E0 ]/ W! z/ _8 \
下面给出一些性能参数:: E( R' p! e* c( I6 E* H0 n
& f$ Y& B' o1 B3 n* `/ A! R

* Z4 {/ V/ N. T6 m8 _' E
图3

' O; y! Q2 W- G3 @3.     原理图设计
& l- ?1 n6 E6 P$ W
, ^6 I1 v) K- h2 FMT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:3 X& L1 n# C' J; c# u% N9 Z
" j0 @' d6 ~0 ^; q+ n- O

# `5 |  q" ^0 H$ F4 Q* [4 X  ]
图4
Camera sensor连接座如下:
( e1 F! V0 Z  E
- z$ h0 T1 K6 P5 U" T3 o) a

# r+ Q2 i9 J) I; v; T. W
图5
6 H( i- ?9 W( _6 S
(1)  OV5640输出的数据格式
; W* K7 ]. P' W6 ?+ p《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:4 L& G9 K$ b4 C7 P6 v# K& C
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]* q. L; h- A9 t- s
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]: j" s, e: g' G  r1 w
而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
4 y7 F8 j2 v+ n/ d  c0 B

, p6 Q. {" e) c
) ~  f# C2 _7 q- i4 ~  \
图6
. f' x, x- f1 `

- U# @. w' }; x: N) h6 U$ q(2)  OV5640IIC地址
: K& V$ V% `( {9 m/ Q- }: M' H
3 @) z5 W0 P/ l3 ^( FIIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:( \1 X6 M- V4 n  X
+ j% `7 ^; a9 t$ f8 U& J; T

2 o7 u0 f3 ~/ U" S8 x
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
) t' W+ r6 L  P) N$ R  A * d0 o/ I+ _9 B
! h1 Z6 r( o% x& j) n
4.     驱动实现
* ?# m: F) Q5 P+ r 3 o, f/ a. N5 b  D! Z8 g
% f; }' h4 F) h1 U) C* t0 l
4.1  相关代码
3 Y  M5 P; y! s+ B7 M8 e(1)  CameraSensor驱动相关文件* b9 z! T' t9 Y- p# o7 t. l
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
( l+ K# N) V4 n& g' l. A5 Q( I
" f9 L' r3 j& v% K(2)  SensorID和一些枚举类型的定义
% o6 o. x' U7 `; h/ i8 P" z\mediatek\custom\common\kernel\imgsensor\inc8 I1 M( C9 f, m
kd_imgsensor.h---------SensorID1 H  b% w/ n; i( `4 ~! P/ _; K
kd_imgsensor_define.h--------------一些枚举类型的定义5 G/ J: T3 A/ ]4 E
4 v, k2 k5 Z( j" e, r6 W
(3)  Sensor供电- I8 u/ `9 w: J8 l
\mediatek\custom\common\kernel\camera\camera  t% R% T9 I9 x9 h8 N2 B- H
kd_camera_hw.c和kd_camera_hw.h
' R' L7 O) |# o) c, n. Q0 l( ? ' ?& o1 B8 [/ ~* R5 p
(4)  KernelSpace的SensorList,imgsensor模块注册
7 z3 `3 g  }* W( S7 A\mediatek\custom\common\kernel\imgsensor\src$ d/ v8 p+ _$ I$ p& Y+ h4 H! P: V4 t
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载5 S' {4 w7 N) |1 }

+ a0 d( E& N/ x9 E: I(5)  UserSpace的SensorList,向用户空间提供支持的SensorList+ }7 h, Z" g4 p9 z  m' A
\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
& k7 j  A4 {' D* \4 x提供给用户空间的SensorList
. d2 h' d( r3 P
/ {# {; t1 J+ F4 g1 T' g& G % V1 \3 V7 r+ [) @
(6)  Sensor效果调整的接口
2 C) N+ t; |3 a/ L! U2 w. ]\mediatek\custom\common\hal\imgsensor\ov5642_yuv
7 w: @  a5 D# d8 z1 _; y% Y0 D! p1 ~ % B$ [# {5 P0 f2 ^
" u3 r- `) v2 ~: m
4.2  针对OV5640的修改; {& {; B9 x; w0 s) I

2 ^, f1 y0 Q% H; i4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk1 O( q) w6 F# m* a

; G" `' l" z2 J$ U! y$ h! ~CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
" q7 }; x, T7 @& c  o! p& t* Qmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
% `4 |9 X) w8 G2 b1 o
" _% w9 u! B  q+ [8 Igc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。9 J1 ]  c1 e# v' b3 ^4 y& g
/ r  @3 l; k! n/ i
我们采用的OV5640就带有ISP,输出YUV格式# j* K* A. F% o' ^/ D

* \5 H1 ?" K1 M8 e+ I1 h(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
) W- s, `# ^- i7 _(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
. K) m7 @9 ]! M$ [( i% [  e
  F1 |, K0 W) _5 g: W9 M0 `/ l& ?& J修改之后的HAL层的配置:2 F: t7 v" C7 [* R% h

8 q$ H3 S( {7 r[html] view plaincopy% l  D- K* e+ U$ \9 d* P

$ x6 `" G( h' q# d* }: l/ B+ B
% q/ n; _& W/ p- i; ]- \
  • 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  1 x2 K& J( M  _6 o; D* T3 j, r; H( L
; G* |/ ~6 g- L* x
; j& l' m) |7 x+ [% L

& O. f/ n/ z: t5 Z: ~$ l; H% w/ ^修改之后的kernel层的配置:
1 Z( B: N0 Y5 ]1 U7 n; i) k$ {5 P- X; {  l6 g
[html] view plaincopy
1 O* _5 ]8 A" x, s

3 x( D! P! E: P0 e+ J- E& W8 b/ }. j0 }5 g% I9 B& U. @  X% n
  • 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  
    ' s8 |* y; g/ i/ c
  o; v9 W8 J: l
7 j; T, _% c& d! L' d
, i& l0 x0 ?% k+ o7 d8 J  ?

5 |) f' Q0 P+ H% S; [- \' Q虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:, d) F/ y. a. o9 E% p; Q
, T: @! g! d8 ]" b- G
[plain] view plaincopy
4 B/ K  F$ A2 @- R/ c4 H/ U

. n7 N; o- l$ W! ?4 Y, ?% f+ k* K) h6 r. C. y4 N8 A% I
  • 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  " j1 U  S( [+ R9 i- ^
" E) M9 ~$ t1 q: k  d
. a) j, _  m- r3 H# U& {' T0 \

" W0 K6 T- ^' D  o
+ F6 s+ H8 y- T$ o# t* s4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层; D) j# D* L( s0 x1 D+ _' q; _
( k$ u6 d, z1 Q6 T
(1)  创建ov5640_yuv并建立需要的文件
& E9 k; J- ?$ V% T2 | : g) a1 q/ k4 Q  n  y6 s% \
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。
- W8 _) X1 e( M; f4 k
3 x8 P  M5 V& K" J3 ?5 L4 i( T编译发现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是没有这几个宏定义,我暂时定义如下:
) x! h+ C4 B# ~6 S3 I  K, h' d. o1 z
[cpp] view plaincopy
7 x) z$ H- o1 ?/ R* }' _' M3 l( [

# `1 K+ ?: P& A8 k
0 T0 ^5 }+ D- A
  • //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  : U" Z. U6 N" Z" f: ]. I
2 Z( E" O4 ^% W( s
9 E4 t) w/ h' D9 c
% v- r/ W" @5 q
这是参考ov5642的相关定义来定义的。
2 C3 a& i0 g/ X& M 6 q3 Z) e) n$ n8 y- V
(2)  在支持的sensor列表中增加目标sensor
) ?+ I- U$ H7 j7 ]6 b: R . F+ ~7 |: i, W9 I) \/ s6 s
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
: W; J: T1 ~( N/ g, A在数组增加OV5640的内容,如下:
- l8 p- C+ C1 v/ J0 Z, H5 |
; x% V1 C/ ~: Z' m) }[cpp] view plaincopy* }7 b. E1 L: K* R
" r6 i0 ^' c3 A. k% [$ O

" y/ I6 ^/ N( m' ^
  • 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  
  • …………….  
  • }  % h  D: _1 @4 d; e( p$ A) f

- Y* \  A0 b- o
/ b% p5 p" s; w8 h$ _! C  P7 K7 ]4 O8 y* d; ^
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);$ q6 A  I; p7 q/ D5 ~7 M* k! a' R
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
$ H8 A, {2 O/ P
  h& I6 i9 d1 b/ i. J1 s9 {  Y(3)  增加sensor ID和字符串的定义
/ H  _& J7 p9 V( i3 C! Q/ ]$ g" A; N8 ]% `
[cpp] view plaincopy) O( f, G' z  q. P

2 b/ Q; x- D' P' c  g# |
5 x! {- r! F- w
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    + E( |) F$ K, Z% C# V7 _5 W
' D1 Y. [4 }7 `* r7 V" Q
! N) P1 ^  G' R2 T0 J9 e

& C* a" Y( i( \, o4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层
6 u; @4 b! x3 }7 J5 g% u$ m" O
  Q1 D8 F9 t( ~2 X(1)  创建ov5640_yuv文件夹
& y8 v+ R: \7 Y4 g+ q5 ^但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
( E$ l: n7 V" d* C' A( A. Tov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
% X! z, M5 q! p
图8
) |" I: T' X5 U
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。
$ T) |: Z8 I9 B8 |" o- D# U6 Z
& U( l7 b, U6 u( U7 Q
图9
6 L8 X% }9 N$ d) ?
此文件下有两个这样的地方不同,这里是指自动对焦模式。( C. t2 F3 u% l; m. c, ^

6 q' J) d5 a* ]/ d, t因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
' }  h/ G: T$ \+ S) Z
5 J5 T( q0 m5 p: h4 G! o# L3 W, r所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv+ l$ o4 U0 {, {5 q

9 \3 |5 p% A$ U# h(2)  在支持的sensor列表中增加目标sensor
) a, M; a7 O, R. I5 H 7 G; U, ~& U9 e
\src\ sensorlist.cpp3 \, J- j7 L( P% t- h( b1 |

, T+ m5 j( T! @- |- _[cpp] view plaincopy1 J& w" v0 U2 A7 l0 u

0 I8 H4 K6 J$ s9 i6 X; ]5 X( ?1 J2 Y* e) }  U' c$ ?! A) X* u
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    ( K  C8 A6 H  {; ^; l
" Z. d. B) t5 L8 [4 X
, q3 ~/ p4 y  E, V* ?4 J! j

+ x2 s, j. [$ [( N注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
! e/ K( l  ~# ~; e0 J  I - v+ X- |. t3 a
8 M" Z  Z' \' t" d6 k! N* o
4.3  拍照图片尺寸设置# ?, o. a' @" e

; H  Z) i7 J) O8 j7 Y7 v/ vmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h9 L3 y/ i% H5 ^. |4 m7 b5 ]1 s

/ \% F1 m  s0 m( o6 P  _[cpp] view plaincopy
. j! t7 d. l( y: O5 H7 F8 ?

$ E  X) n  A8 Z+ x3 _6 M
4 |! m3 b, r7 U* C+ }
  • // 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  
  •    )  
    ) O) b  W% c2 v6 W7 {. T- V

' f+ g+ b3 m2 j7 B! _1 e9 h7 |) e: ~3 C7 W! U; _
4.4  Camera物理角度旋转$ P$ ~9 V( j% P. @  i0 }5 ]  u( t
Cfg_setting_imgsensor.h
# t, N  R; X0 {+ j8 p. n: E8 e- n1 [  p
[cpp] view plaincopy2 [( q2 ]! Y4 J. w
  B: }/ e! Y) O9 b4 m% x

0 b  o7 t* D1 f# A
  • /*******************************************************************************
  • * 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;  
  • }  4 i/ D& Q* |: z

7 s+ ?' `2 r: s* h3 I
  B3 v' j7 `1 a$ a+ ~; y3 t# z9 v9 {# |
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)
9 S1 `3 _& Y4 C2 u参考:http://blog.csdn.net/loongembedded/article/details/41679977
4 ^9 T$ B8 _5 o1 O; ~ 3 M: F) C5 x2 d/ Y. J1 k

8 T; r$ u; D0 T7 X- ?看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。1 C/ W% q  u8 a  V. i% |6 x3 I6 F
http://bbs.csdn.net/topics/390837150% p) e; S) O. k
* h) S' x  E) i' r8 _5 q
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。- j0 p) D2 L# ~1 C1 V- T7 ?
. t/ l- n# l: M0 z: p# C
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h3 K8 y/ S2 P0 |; C  X% ?0 Z  ?
0 z! \1 i$ _7 k3 G/ j7 U
[cpp] view plaincopy8 U- \- Y9 H/ q8 R; X6 G: ]. X! C: Y

& f1 G8 |6 [& ]) Y7 d( E4 b0 D6 S& g8 X# z8 u1 Y. j$ u
  • /*
  •     // 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  
  • )  
    5 m, c9 ^, B$ g. _/ k$ `

' k, O9 N+ x  J; ~4 q
0 o, d, k7 f1 G+ r- F" M  ^9 `( T* b1 d& ^2 l4 m- O

% @2 P$ [- h/ Z& ~# x" d- Y. @9 y
: g& j0 k; e% _8 H/ t6 y2 F: u我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
& `- C6 E: \# _+ e. W# q/ ^+ x " u1 H4 V6 i/ u

" N' X( m% m5 G" W
; J/ [1 x+ M! R! I参考链接:) c/ y7 {. I8 K% ~
MTKAndroid Driver:camera
/ p% Z: g+ G  h6 \8 ?2 a+ xhttp://blog.csdn.net/cbk861110/article/details/17437283
( K* h  _- U8 Y% U9 ~) c / p$ D9 E+ C6 r, r
- k6 D9 Y' A, Z$ `4 O+ ~) b" G
MTK cameraimage sensor driver
6 N8 A& i8 v' J, m9 rhttp://blog.csdn.net/sunweizhong1024/article/details/8497790
# H! }1 y3 C( ?# h9 v
5 S  |! Z, I/ t6 M% }4 A* kMTK平台的ISP架构问题. R, k: A6 O" W; B6 ?
http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727  d5 G. G" r/ M, o
, h4 F# ~. x' y8 g( e& D& X5 S
OV5640 YUV的自动对焦功能为何没有开启! J5 f) S& W# B4 Z
http://www.16rd.com/thread-10480-1-1.html- K; v# J6 n' e
" K- _, H; t- q3 G) V8 M- V+ i
MTK Android Driver知识大全. ]. K  T/ N3 `8 |
http://blog.csdn.net/cbk861110/article/details/40931835
& _1 Y( s/ i3 M2 f8 @' _. C7 N
! C. Z7 w' w  _3 vmtk camera移植步骤
/ g- b8 I. b7 G& bhttp://blog.csdn.net/vasvas/article/details/39250473. X7 P6 `; R$ Z. M

1 [6 o. z; q# A7 ?# Q. `关于 前置摄像头安装0度或者180度) P# B( D6 s. n
http://blog.csdn.net/kkkvvv123/article/details/8809823
+ c/ w7 w/ p8 U0 O
) I, z- r; M4 Z- z  f' |: wCamera 涉及的文件70; b" z6 p/ T( Q0 I; _
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html9 k, l+ D8 Z- r4 O

& G* @2 z# J8 i8 _: @OV5640全景模式预览倒180度,拍照正常的问题1 Y. P! ?# T, F2 W0 ?/ ]. h
http://blog.csdn.net/guoguo295/article/details/21245815
2 W0 H4 R; ]; X( z5 |1 @
6 z! `' f# D, L7 e' O2 y
) f: s- \' ]! A; j6 A" E6 C6 i: n

  • ! g4 \& p: W' z# z7 F* ~! ?, C
    , W' B! c& y: \( n

) o9 \( [, @/ H: l! J3 H8 g' p+ ~# Y
匿名  发表于 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.