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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动
. t6 z" f1 }5 K
8 Z4 S5 `, L) }$ K
) U; J3 w+ g7 ]# y- u/ Z$ k" x5 m
MTK6577+Android之Camera驱动
$ W/ b4 u; F" i3 j4 I4 {
8 j9 x, d5 _+ n; h

4 H) @4 ^- k/ g
图1

/ K, k! E1 K9 l  v9 L1.     Camera拍照相关概念
6 V2 X! u# |: j 8 f, O4 ^- q3 |' C$ M' _
1.1  ISP+ `$ Y3 W- ]+ |+ _

+ y/ n3 T4 L, Z- u; A4 J$ ?$ risp——(Image Signal Processor)——影视处理7 J& _( S2 f2 i: m

$ i8 ]3 a( y* `无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上9 H/ m# [  H8 ?3 E$ I* E4 y! x, Y1 w

0 Q) ^5 R2 v9 w# E4 `3 r1.2  720p$ ]; [; B" R  z" {* ]
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。4 b+ l  h! ~4 l& D# X% D2 i# S6 `

, O7 J8 F% a& h$ t* c分辨率为1280×720p/60Hz,行频为45kHz
9 n) l% u/ p5 e9 E# s- `& \
% W  O' e1 U# D : x$ j1 ]( ], j, W
2.     MTK6577Camera控制器部分2 j- j+ b; {  P# G

) g: P  w( j! H; h% a2.1  camera控制器概述+ s8 `$ b/ @7 G4 h( q
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)这些特征,用于图像处理。
0 k9 |1 u; @4 w1 m' [; B
8 i% v& I  O; `. V* I1 u! V! s2.2  camera特征; S# ~, Y% h. @3 }) g0 a4 f! q

3 g* O, _9 K' `7 ^4 }MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。5 S5 k- p& k! ]1 R5 `, p$ I. _
0 h- h& ^( r- w2 b/ {6 }" a& B# V( v
支持的特征如下:
8 b! d2 L* v  I. T(1)   抓图分辨率达8M像素(image capture resolution)。( u  k- l7 s, N7 d
(2)   录像分辨率达720p(video recording resolution)。4 ~5 c5 K7 I, l( p, k; [
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。
$ c! g4 [6 g. h3 `2 E+ T9 e(4)   曝光抓图率8M@7(burst capture rate)。3 _" M- n( J& J' m. \. \
(5)   图像处理0 E! g. q$ y) m- l
低像素补偿(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)。
( t# ^- ~3 G6 J. k2 K# z7 \ : W! k" y9 S0 d2 L) V  S
(6)   3A统计和校正(statistics and correction)
! k; D- {" ^3 e1 s(7)   闪烁检测(flicker detection)。. {) F  U' y" h9 U

0 n( f7 Q8 S$ S2.3  camera框图
2 k/ m& k6 C5 {

, H+ }* D$ w+ p
5 C" i! W$ d- 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)单元。
# ~, k9 Z1 N' s% p % O1 v) q7 h0 S9 b
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。( n- R4 w- n5 ]

& p9 s' p  z1 J! S' A8 W1 ?9 t3 J9 ?$ u色彩处理单元接受来之镜头/传感器补偿(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读取出来。7 E5 h: i( l5 G' C
" T- z) _) T; o) d
下面给出一些性能参数:
1 n0 x$ ~5 J- Z# A7 I  ?) w5 a" h+ V

" W1 s! e: f( N' W* u1 o9 B
8 H/ b' j! s2 g$ N, e
图3

& a' x: P& G# G5 f, A: }3 w3.     原理图设计
$ G, O9 P3 G3 ^  E0 l - H+ Z, Z  w8 s& s  b
MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
  m% o( v2 N7 p0 ^- r0 V# }

/ U8 \/ C& G+ Z' v
9 k7 p. R2 m  L5 [1 ?
图4
Camera sensor连接座如下:
( ^* b+ j1 h( ^; m% e0 |" O2 Y- s% n
6 V1 D% ^$ D5 L
/ m. T; Z; [- o( V7 |/ g
图5
8 K3 {) c. u; f1 i; B: C
(1)  OV5640输出的数据格式( I' i. H, P- s5 w
《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:5 @" E6 k+ T$ l9 v- T0 S) E
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]5 p6 C7 b- g0 {- a
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
& j. @4 Y" \) ~- s而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:3 F" y! Y+ w0 g& V% m1 i8 H  c
7 q$ U! k2 l# n3 i: t! M( t. C" Q
* o. S9 A' @" Z
图6

" Y" t" y; _# F9 c8 E0 o * }+ ?, [" j: ^" V
(2)  OV5640IIC地址
% N' G# V& D# ^! P7 m7 i8 C; K 2 E0 w3 ~/ P$ n- L+ g1 E( A7 ~
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:1 f7 V" M7 e1 {4 G/ @
% M1 D' l, T) p: v" t% v% e
  c$ |  d/ X! G! w) F  [5 U: M; U, `; }
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
; f' f3 I; X" x: {* W4 b
' r& O5 ]1 O9 A
+ O5 R2 j  @; T8 r6 L
4.     驱动实现& ]) T2 Y* H; e2 \
$ V4 B9 W; Z+ g& k  p7 ?9 @* ?5 g) f4 x

* K+ N' F9 L/ q, Z4.1  相关代码: D6 B9 i. M0 |4 p* B. R
(1)  CameraSensor驱动相关文件
0 C; m- k) `8 k5 W\mediatek\custom\common\kernel\imgsensor\ov5642_yuv6 R1 _! J! V# ^' v$ Y
+ ]7 G- x! e6 R+ y8 g# t
(2)  SensorID和一些枚举类型的定义! e+ |: a/ U* D: Q
\mediatek\custom\common\kernel\imgsensor\inc
$ R' e; x3 _9 K- Q7 z1 kkd_imgsensor.h---------SensorID
" Z, A" |  N: E1 i% bkd_imgsensor_define.h--------------一些枚举类型的定义; ?) k! c/ n$ d0 ?9 y) ?4 w+ @# j
# s" y' t1 m. u% Q5 F* x' w
(3)  Sensor供电
" `" |# }* z2 D0 N5 Z9 j\mediatek\custom\common\kernel\camera\camera
( g- L/ o  @* I$ Lkd_camera_hw.c和kd_camera_hw.h' q$ G* J. ]) V( E& K; {
4 [7 V' c) f) V- j. J/ V( i! t) `
(4)  KernelSpace的SensorList,imgsensor模块注册  W- ~* k$ j, W) q
\mediatek\custom\common\kernel\imgsensor\src+ y/ O7 t  j' w7 K1 c7 d& \
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载
5 T- [- g% y/ ~! A 6 c" q6 \  d" B7 l3 i. V/ v
(5)  UserSpace的SensorList,向用户空间提供支持的SensorList1 ^& n2 D5 o6 [" y6 u7 ~
\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp! @5 q; K7 [3 v2 g1 x
提供给用户空间的SensorList3 l, l+ J. d6 i1 w: N+ A
/ M- w) z- V. t0 p( O; A4 K
" p. }# l# P( u2 @+ |
(6)  Sensor效果调整的接口& ]) O7 E9 ~4 v9 x
\mediatek\custom\common\hal\imgsensor\ov5642_yuv
/ p# W! d) Y, P0 I5 P * w. q- R0 z; F, {, O6 R

/ d1 u: [* z9 ~0 W1 ]7 r. a4.2  针对OV5640的修改7 s, t7 P, W! w

" \8 ^5 ^$ a/ v# k3 U) A. B4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk
3 K6 q% R& L! A
& k6 D. Q$ l6 {; V  fCUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv- q- B+ H0 r- K  V! d' P
mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。; U5 ]6 ~6 n: q" C
+ ~* V9 N" n/ l  S0 g% l8 _
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。6 x* h6 m: E5 G3 v' @9 q/ k
4 y2 `  \# q: D' S% y
我们采用的OV5640就带有ISP,输出YUV格式
% X. z( Z9 ^& n5 a' \  P8 i: [+ W 9 I8 Y  @) P* V8 m$ X
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
; v' y. Q* E, A0 L# W(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
! Y" P# v) }$ P+ k3 C+ [ , k, o) A2 f; ^5 Y
修改之后的HAL层的配置:) ~. ]4 M9 ]7 c" p9 v2 r( w; a& }
8 s6 r: f  p1 Q' U( ~1 S( \6 d4 a
[html] view plaincopy
+ ~. a7 {8 S2 y9 S
& H* _: O3 N+ N5 p6 C" Y# R6 f4 N
$ f0 ^9 {. C4 [1 \% e+ F3 a
  • 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  
    ; r( j& a$ n" e; K, i+ X5 K6 l
: X8 b& T. J' D' p8 T" X  c( n4 A$ _
  U( r4 J  `" e

0 V) I4 w4 p1 w; {修改之后的kernel层的配置:
9 [( w& @% K$ U) ^+ m2 R
! a$ \3 q& ~: @& U: ]9 E; X[html] view plaincopy: ^% J' \& X3 h& n- v- L

/ P0 U0 T  R% C. e. H8 D1 k- x" a( z& R
  • 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  - z0 L9 E: u! S% R. Q& ~: @

9 E0 Z$ ]2 A" G5 \; |& z8 M1 F* ~& j# N) n2 l. V

, H& w: B, Z) g( @4 E. x3 E. P5 v2 ?& w( z: J
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
2 e3 M( h8 |6 `) `
) q- t7 R6 G* A5 r+ w[plain] view plaincopy* B& h# x3 s: }* ?2 Z

* L, Y+ W# }  @" E
4 Z- [# _8 G3 q: r% k1 N% j9 b1 m* p
  • 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    D5 _1 Z8 ~: u( Z3 S+ i3 u8 o! A' S
! L! D3 G. |. p/ M. M
+ q  V6 v) n6 c7 @, r

& F8 o) ~. g: |0 g
7 L2 _5 O# F6 A/ T0 X( n4 I4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
# R  G& \" S! Y/ k
$ G" b. F" ?4 p- t0 q* J- g( Q(1)  创建ov5640_yuv并建立需要的文件* I  g. r, `; h3 K, x
  Q4 [' c8 w* G9 b4 y/ e: |
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。( G# I: e! N3 p/ o3 A: V& j
. ]4 }8 l" Y! e
编译发现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是没有这几个宏定义,我暂时定义如下:
3 R4 x% D- a  i  @! h4 Y
- ^1 ~" @; l, b2 E[cpp] view plaincopy
9 L# @/ K" d3 {
' `4 E8 \2 g& J; K, d4 o

/ ?: k; h; R( l$ S! @. w" F
  • //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  - B& M8 Q0 Q* p5 Z7 l- g9 h5 O+ K: B

& m" s  x- B( ]1 B; g# N; Z- B% a: U% c2 y/ [8 R2 @+ D* R  E4 a5 Q' e9 p
+ J! q4 U4 I8 x. s6 l
这是参考ov5642的相关定义来定义的。7 o9 @' L  S4 [  F) A
& ]& N" v, Y9 n- K' j- t
(2)  在支持的sensor列表中增加目标sensor* e4 c  @0 b5 a% D  U' H

6 a+ z1 o3 |! l) y/ qmediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h. q+ h8 o, ~& O4 Q
在数组增加OV5640的内容,如下:
$ t% d( L3 T/ p7 P! _0 Y* R$ K  s2 z" \
[cpp] view plaincopy9 i  w* Y8 {  p# @& x
* \" B2 J( ?" v  }; @5 Y4 c

' i3 z1 V1 o5 }3 Q/ o
  • 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  
  • …………….  
  • }  
    : n' F- t; {2 G* ]* `% l. y

1 t* e9 L$ y& W3 m
8 g  d/ N. q+ v% |" A/ Z( J) F% ]& |7 R! d4 m0 A3 r2 I
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);* j8 p1 L, t' V
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
- l5 C/ D( P  C" D. M% A/ q( `
& z( R9 ~* Y: h( t  H& F" Q  c  a(3)  增加sensor ID和字符串的定义
: y# _: T( {' l) y( Z, l2 Z; C- E' f. Z( L
[cpp] view plaincopy% }0 Q8 X% E# L8 L0 W4 G
$ q8 b& c( w0 j, T6 l

0 ?+ V5 a3 C6 k9 f
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    : O4 P' h- f3 e6 e9 f) l% t" r

  \' G! D' T6 q5 ?3 k: V  h0 P, h* R+ p
: E2 r: _" m2 A0 P1 b
4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层
1 H' |7 C% K) u. i, s$ z0 A/ V % P% _# T+ b$ W5 y3 ~
(1)  创建ov5640_yuv文件夹
! P0 C* [/ l0 F" }' L! E9 @但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了7 H( ~/ q. {6 @. p0 N
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
( ]& N4 f. }4 O& A* I
图8

$ A# T7 J1 y5 B: F* U0 n这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。0 W9 x% a0 ~5 }

! W( G" T. N  P+ E7 ~# y; ~9 o
图9
: ]9 u, g: j1 U4 v( U( U' S  y! o
此文件下有两个这样的地方不同,这里是指自动对焦模式。
- X9 \9 Q; H, v4 i9 Q" Z9 `4 _
9 J% ?8 n* h2 \5 U* E1 h因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
6 S0 n9 ?. o0 `! S 4 o# S" Q4 Q# `  k/ c3 f
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv
2 i& ^7 e. f& V2 j( s, e4 c
  e& B8 e$ ~3 Z/ |5 D1 p(2)  在支持的sensor列表中增加目标sensor  m/ [: ]/ a7 t

+ r: x+ _+ l0 f# i* C: ]\src\ sensorlist.cpp0 x  }  P4 f  @  ?3 r
/ x1 Y* j, `0 S
[cpp] view plaincopy) M% f: G' x7 k- c

* h+ e: M* U" ?% c) ?
+ i: h0 T5 W/ `5 U' b
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  3 [+ ^+ t! R8 a- H$ v) F/ j" C
$ A  e8 V" W6 f
- i5 x/ F0 B# @/ @8 p  F3 q

8 Z0 J9 Q! {: O) j7 T& E注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。7 h' q& W, ~8 Q/ _+ f

) c, d! G# z! F4 a5 O; v( J
/ i- B$ s+ b; S$ }8 d: @4.3  拍照图片尺寸设置5 h3 u2 d5 j/ i0 m, b- h
0 F& Q" H/ S% y% F! o
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h6 v  E* x3 l% I- M& s

6 s, q: m% M& @( L' ]$ V[cpp] view plaincopy
; J& F! P6 p! S+ N, g) o- |

) w; P& Z4 |- w2 a! J/ o  d! @0 ?( ]$ k$ F
  • // 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 J) H  [0 }% l  G/ g1 k

/ w" p" P& U+ q/ M- O
" j) d. ?9 o% L+ T) G4.4  Camera物理角度旋转
% A" [: a+ ?# I, h+ P0 X( Z( J: tCfg_setting_imgsensor.h
# I8 Q  d/ \, W$ e; Q
, c0 X8 v, k: Z# x( {[cpp] view plaincopy& m$ a+ p; n& \/ U; R

" ^, `% @6 m+ A! g2 H& d5 I) Z& j+ P
, B5 q, F0 \9 e; \
  • /*******************************************************************************
  • * 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;  
  • }  : [5 ~2 I. {$ o. t9 }

& {# N- g" T- k, S( w& \# q: N
6 ~3 [: Y) \$ e# v# E( e9 |. L4 y& Q( q, J3 ]2 z
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)
( N% T5 m8 f5 u9 @6 n) }参考:http://blog.csdn.net/loongembedded/article/details/41679977
" M3 b2 k+ C, t$ }; e ( g6 C3 s4 z1 w' G& _0 H: t, B
) m: G. _1 e5 c! I% E4 U' o
看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
5 B, {% R5 \' i- J; ?, \http://bbs.csdn.net/topics/390837150
; t# ]7 S8 p' ]; [7 M ( i4 Z3 I0 s, v5 u7 r% d: R& E
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。) D$ }! }; X! p% i" p1 {
$ ?+ ]/ h$ V' L5 \3 t$ k+ {
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h: I& m$ @: m- `6 q( e6 m

, f, ^' z9 x  H7 ~7 J* m[cpp] view plaincopy! ^$ V3 V% y' X5 x5 u3 p2 [7 [

# a0 T( Z/ j- n8 s- M+ \# k, W) i" e, }
  • /*
  •     // 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  
  • )  
    8 [$ H6 Z- U1 `: |& J- e3 a
; B4 i% e0 h' A% j+ s' y6 h

) f+ h8 h$ S* }& T; G5 g2 K" N/ [- A& |6 N
( f; V, \4 D/ g$ `0 n

$ r) x; N8 ?/ q' r* Y4 _我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
' J5 u& J3 Z& o# I. y 9 X9 b( N) a6 Q$ j( w. t& Y8 f
- l  i7 m1 d& W! h5 A

9 |$ v! _$ ~) V5 U# D参考链接:$ f0 p  l$ g8 N+ ~
MTKAndroid Driver:camera
, c2 j+ U; H2 m- U/ I0 h" `http://blog.csdn.net/cbk861110/article/details/174372837 Q0 O: e/ s# c4 z
' L- Q# w, \7 i1 s

6 t! U' ~, g) {. M* fMTK cameraimage sensor driver
4 F, X: y- i5 A5 lhttp://blog.csdn.net/sunweizhong1024/article/details/8497790
- \  M" J$ P4 x3 {( m% j7 I , N0 V/ }* |0 y; P  C: }
MTK平台的ISP架构问题
1 s: h+ e5 Y6 H. d& Ghttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727& u/ x" ]7 k( E( m+ n% h

* b, U, N: o" A. M3 d* }OV5640 YUV的自动对焦功能为何没有开启$ e6 L( ]- y3 X! ^
http://www.16rd.com/thread-10480-1-1.html
% U1 l# N5 w) N6 a
7 l; Y9 Q- ?; L3 UMTK Android Driver知识大全: `0 f) Q. T, o0 Y
http://blog.csdn.net/cbk861110/article/details/409318353 `' ^- U9 \4 G& h' j3 N* i
7 \  h+ V' n* H
mtk camera移植步骤
/ ?* h0 K2 e8 ]( Q7 q2 N$ B9 rhttp://blog.csdn.net/vasvas/article/details/39250473
) B5 V7 ?+ D% ^% a6 }8 M# Q% v ( f. y% }, K. s3 O  p
关于 前置摄像头安装0度或者180度
  @6 c2 E% t  {. M- i& Yhttp://blog.csdn.net/kkkvvv123/article/details/8809823
! d# c6 f" z3 e8 k& {
6 s0 l; F" {# m4 Z1 _# x! dCamera 涉及的文件70" C+ H' s9 f. z( [* G5 V- F* j9 D
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html
' {; x  o( k6 Z5 i1 |" k 3 V7 _0 x' v) h' b
OV5640全景模式预览倒180度,拍照正常的问题2 f  l+ Y5 j" l' _
http://blog.csdn.net/guoguo295/article/details/21245815
2 l( I- Q2 t. j$ E

4 w$ }" S; n; c- y% e9 W3 @" T* L9 v% x3 S5 D% K

  • 0 Y3 X1 D& _3 p5 A
    7 }/ ?6 A. `/ ~# m% m) e
6 G0 P+ k: P& R1 x

6 m  C" e: m4 K5 W7 J$ l
匿名  发表于 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.