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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动4 {' N$ u0 ~( }+ b. J7 j
: G8 r' v8 x9 a3 ?
, v) |* H1 Z9 E( i+ J6 q: b
MTK6577+Android之Camera驱动
: N- P3 v# _6 y
, O4 k9 c- i5 U4 B, ?

+ J% I% b& o% m( L( t
图1
$ u1 c; E6 R) T
1.     Camera拍照相关概念- F1 r. j% l, L6 ], U: a* j
" v& R' E2 q- G# \  U2 u
1.1  ISP
& ^: p* f: h( K+ O; Q. r) b 8 j9 H8 m" x! |6 I9 l9 w
isp——(Image Signal Processor)——影视处理- X" i- @1 o% V8 [
4 A7 Z( k& ]9 s. [; J# t6 h: c
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上. Y1 k) M5 O: A* z

# E* y) \7 n- Q6 Q9 c  U1.2  720p' o- N% F  D3 D9 |  e& m
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。
2 Q8 D2 ]) U( c! `; o( f/ ^: t2 Z+ N
" m1 F: `! T# K# n4 R分辨率为1280×720p/60Hz,行频为45kHz
/ T  h* j4 h5 _; g- U ) H6 S$ `2 j/ r& Y0 H
! N- h: v# r1 C2 `5 p
2.     MTK6577Camera控制器部分
+ Q, ]. _( |9 J" c" J6 Y. v
+ }/ j" |' ^2 i; \; y2.1  camera控制器概述
& L8 b3 N3 R* V3 J" W$ }/ fMT6577 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)这些特征,用于图像处理。
' X* }4 g8 u! }, A' `4 w
% x. H, b" u# [/ e. N2 n2.2  camera特征
: K4 K/ {! u' B, e* E 3 H1 O* l7 o; O) g  P( r
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。6 L" l" I+ Y; b4 i$ L
* a2 @' Y" E' n& T3 q9 L% z& b
支持的特征如下:
# j+ M3 ]! J0 g( j- P- f/ m3 I(1)   抓图分辨率达8M像素(image capture resolution)。
# l( d5 [/ G, t- O' J" h: n(2)   录像分辨率达720p(video recording resolution)。( t$ n8 l. T/ u% X' X9 r+ p
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。: L0 }2 M  F4 }- b: F! G
(4)   曝光抓图率8M@7(burst capture rate)。) H+ p/ ~! J6 @) ^8 k4 f  P
(5)   图像处理
- B3 H$ `+ Q, V7 v低像素补偿(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)。+ D) c: ?7 |4 g( _3 A

# |* h2 P  j. W' ?# e8 f(6)   3A统计和校正(statistics and correction)# e/ Y  h- R4 e5 e# m% Z
(7)   闪烁检测(flicker detection)。; j6 Q' d# W2 }4 t2 M' R/ s
( X5 a* N9 m, N6 Z
2.3  camera框图2 h8 I7 A) }% C9 I0 U/ n: ?5 T

- C& P" ^2 `4 Y6 |( V
3 N  `( O; H: U4 ]/ p
图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)单元。/ t( }5 s/ g+ w1 e) \# E
' k) E: y2 X3 D9 o9 X. m
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
4 `% c# i& z- `- j, R! P
& t. F/ Q. L- u3 |9 s色彩处理单元接受来之镜头/传感器补偿(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读取出来。) r( B1 s! z  F. |- x, P  l( L* r/ v
- b* A4 a$ Q* b  _
下面给出一些性能参数:4 ^! o/ Y/ y# D$ z

% ~4 r/ P* n8 i. ?# m# y

& p3 n. h5 S! H: ^8 B
图3

' @0 \) j% U  H% W  _  O3.     原理图设计8 z( u& E! W" E- _
2 X" ^7 v1 `+ u/ n" k1 O
MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
$ T/ }7 Z; Y* w0 y# T" \
7 @4 j: t/ u7 H3 N) s- S  l* J, \
1 N! v# \7 c5 i
图4
Camera sensor连接座如下:
. Z9 Q( F" Z& s& F4 d

) c8 [. _! ^: b

. J6 D: u  v( g6 n) _
图5

! H* h6 w, n# E; ]: D' k$ h: r(1)  OV5640输出的数据格式
: t/ U( @( K4 @0 N《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:( s1 x" q% h5 \' Z
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
7 C+ h5 s! e( q. U  S/ c* l# X8 nSensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
8 I% H* f$ W6 g0 C% k: M# z+ @4 q, [而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
9 ?6 j6 G( |' ~. P$ w' O

! w+ _7 F; `0 E5 C9 f

. |. o; L# }8 b& ?" S) R! d5 y. h
图6
7 ~9 }9 {8 y/ r  }. M* w: P7 I

2 R  `( G( f5 C& h& @, v) W) U(2)  OV5640IIC地址
+ c2 C' U# f: G, H2 Y2 j& h. A 2 E0 m1 P0 G) f0 T8 q7 F
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:9 l9 k. H$ _9 N# Z, r

$ [0 v+ S& v; {: Y
$ a2 I! _" v% L2 N; q
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则( _) N- ~, I" g9 w5 B% n

0 S2 F5 }( z  s

6 z& d) n: M$ N/ _7 T# j4 a4.     驱动实现
' N8 u3 z7 S% e* x- m
4 Z7 r4 m& y! ~8 P- X' Y ' Q- p6 p" j! U, J( G
4.1  相关代码
+ N+ D: t. i* _7 y( v) I9 C(1)  CameraSensor驱动相关文件
& {4 F8 P9 C& z7 W7 a' j\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
- d& {$ [4 x  } 4 b, O3 P& _- V* D/ _5 k  a
(2)  SensorID和一些枚举类型的定义6 @, q0 f7 b: z1 j
\mediatek\custom\common\kernel\imgsensor\inc
. A2 E, W: A) ~% d0 y. E6 l! dkd_imgsensor.h---------SensorID
1 y% U! m- ~/ |9 P2 Nkd_imgsensor_define.h--------------一些枚举类型的定义
9 U$ d+ [9 P# ?* {/ h
: p8 k" q4 j: h" X(3)  Sensor供电  b5 o8 N8 ~) G+ ^: W
\mediatek\custom\common\kernel\camera\camera
( k% d+ o7 ]$ v7 k" I2 jkd_camera_hw.c和kd_camera_hw.h! T3 m! l" n, K8 K2 B) X& [

8 s% S, C% u% V+ J  H% ~(4)  KernelSpace的SensorList,imgsensor模块注册& a1 A% z5 F% c
\mediatek\custom\common\kernel\imgsensor\src  i1 I6 E) [9 s( [- i) G
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载
5 w$ x8 _* k/ S9 r- \' l# a
, b2 p: I# ?6 F- A7 n& n) c+ I" Y(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
$ M( F( P" F9 Y\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
2 ~1 E- M. v2 f提供给用户空间的SensorList
2 I7 U7 Q- @5 m) b& M0 A
5 i. X& b. q1 C# t : A, E( q6 e, f) A2 _4 c
(6)  Sensor效果调整的接口  q: J4 j4 \8 S3 s' q4 V
\mediatek\custom\common\hal\imgsensor\ov5642_yuv, [$ U( [3 _- A$ C1 o' b5 D  ]
/ {8 O* {8 f: r5 K

4 `) C8 [( j; E2 w+ @$ O/ \4.2  针对OV5640的修改( D$ f# `( r  ^0 ~& T8 L3 J& p: ~9 V, V

" I' |  N0 q1 T1 @4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk! C9 i6 M# O" P  K9 ?

* e5 l0 J  ~& H  ?CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
5 z0 L2 u# ~2 ?% mmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
" z9 G, n- Y% x; i 6 ]  q, F4 |4 p2 n! k. X" f/ c
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。8 V* d8 V6 g! Q/ g9 N$ q; ?( F8 M

3 K# A, e! u" Y9 F, x我们采用的OV5640就带有ISP,输出YUV格式. l# u9 u5 Y5 g# d* j2 a( \; ~

+ J6 L0 }3 P/ T* p; a5 j(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
, h1 N9 Y$ ~$ Y- U1 y% \" b(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
* v$ n; Z  ]; s' D! ?, `   v; }/ R6 t6 H: \
修改之后的HAL层的配置:
/ n8 j: y! P: W. w7 P0 \9 m0 L, X5 C) }
[html] view plaincopy
& W1 D3 l7 T6 ]8 p8 T
) o( s  I7 ]/ g4 Y

/ |- w! c, w" o$ t  E
  • 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  " C& }; n3 @4 A. e# e6 a: Y+ R& m

, I8 ?! Y( j% {; b6 k0 G% q% O  f# V6 n6 S6 L
# ?" U6 w5 n$ K6 a
修改之后的kernel层的配置:2 j- E( c9 v# x9 f9 o

& ~( d% ^1 ]1 R2 ~. a/ J4 Z[html] view plaincopy2 x# ^: H+ m+ O* t" }& X

6 p4 O3 l3 @2 J
! [9 V( _9 Y: h  ?. b
  • 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  - p* |$ S; I0 S3 k

/ w9 y' O9 j" [% S* ]4 o4 I- j
+ Q- @0 [. k- }  a5 W

  W* |& s; W" r0 v虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:) K; c  ~4 Z% @  R" P

* {4 A% ], w/ l6 G  _: H0 t[plain] view plaincopy
; d! n  i- C0 k
- ]. \5 d( Y; A; A' A

, _6 }. K9 Z1 b5 u+ f6 Y6 e  O/ Z: L
  • 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  $ b( O; A: b$ Y
5 x' a& }) E" w# {/ k
  |2 d( D. X! o* l
/ W% }: C9 `1 x2 N/ V4 Z( ~

$ i; K+ @) e& ?4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层2 s" z% M6 T& [
& r- b6 t7 `- r/ I! l9 Z5 t" V
(1)  创建ov5640_yuv并建立需要的文件; I9 P& v4 p; A& u: y
" }! t/ s7 P% L3 W6 Y
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。1 q5 C1 L; C; T# l
' M' r8 [, Q# G3 F$ Q+ V) l
编译发现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是没有这几个宏定义,我暂时定义如下:
( {9 \6 Z# Y( j0 G! J$ w& J7 F3 E. J2 Y. t% ]8 c
[cpp] view plaincopy
! r6 {  ]2 Y% e+ o3 Y7 W9 o
5 d6 N6 n7 H6 `( \# q1 u8 F4 D( R

, H% A6 r* L5 e9 I
  • //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  + W8 Z5 X3 y3 G7 y, X
2 J0 U  ~7 _/ Q$ p1 w, t" K
, l  \4 {" A( e, k
; N: C+ I8 h5 R2 u
这是参考ov5642的相关定义来定义的。8 c  O* `) ~/ i
& |. Y+ a7 m: [" ~" @! I& a
(2)  在支持的sensor列表中增加目标sensor
7 D& V2 a/ @* j" V' K" m- Z5 \
) `: \& g1 g& z0 Dmediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
! w+ |9 ]/ u8 C+ K8 p% i$ g* Q在数组增加OV5640的内容,如下:7 ^* c1 [  G6 n& `; c. m# {$ s
0 h. {4 P8 I5 u  V" e/ o/ \
[cpp] view plaincopy; J8 d# |. j; e9 O5 A: G
% S& d* ]/ V% B+ Z& t

* q' K$ j9 A% c* f7 R
  • 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  
  • …………….  
  • }  % R: D* A- G9 u' G

7 D; G2 N! `/ ?. k( ?; J8 c3 r1 L; }& M
1 x% G% X, z' `6 o
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
. }8 G) T! _0 q2 a& X9 G0 i" smediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h+ H. S# ~/ H  j' c

8 P' l. C; e2 W) `' r(3)  增加sensor ID和字符串的定义; Y6 e. x' i0 S; H3 f; g
$ o# q! o1 s9 X6 |: u
[cpp] view plaincopy  U2 d+ D" v1 Y4 D. s* K5 v, ^" U

5 V% h, H3 `  v6 m% o5 J, }8 d; _
, S! C" m8 ]. {) c; m
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  ! O7 Q3 @6 B. O+ S# K# `
! O) e! b- E  M- Z7 j

: K' {' y& d6 o* k6 H
, v2 ]3 O  a) Q. E! k4 ~8 _2 E4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层$ l3 L) C+ h7 r$ O% G/ T7 H

$ w  i/ w. z* ^- S) S(1)  创建ov5640_yuv文件夹! f; k9 G5 z% b$ l1 o3 F
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了$ j; s8 h; u9 j2 G, d, R8 _
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:. N8 Z( ^$ _# f$ M2 k
图8

& ~, K4 A" ~8 w+ ~这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。% r2 S, I) B; K& y) o

9 }) h, n8 P9 ~
图9

- ^# G' x' Z: \( {此文件下有两个这样的地方不同,这里是指自动对焦模式。" ^% U8 r/ v" Y1 E2 p/ j5 e

( a1 m8 k9 e: l2 B( W因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。. h/ w/ D) y. B/ P5 B

6 I' [6 s( v5 `所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv$ q1 r( p& b8 {8 T) |+ O' z

9 b/ T( U1 I$ d- {  H! H6 v(2)  在支持的sensor列表中增加目标sensor7 l7 |4 P. F: r

" x% W, _' k/ l1 \7 n+ L6 Z\src\ sensorlist.cpp
" H$ K# _/ T" F5 \6 u) ?2 @; M
! y! q; i) q& [9 O% I4 H[cpp] view plaincopy/ {8 z3 t; i. Y. t2 t. a* n
3 Y, f+ N$ w/ g* I& y7 }$ F( H8 O5 C

9 s2 _$ @: L* ?6 r% f$ J# |3 B" }/ `
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    4 D6 f9 w, S7 W4 A5 X  S/ V

, A# E2 `4 M) l1 G* k& v1 ~0 I6 f- z% d' `! [: L# ]8 v9 D6 L4 F
/ Z6 e/ f2 Q+ c) \' S
注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
0 s1 T( s8 m( W
; m! r9 K# a2 j. }
, N$ }7 [* `, |* i+ z4 ?4.3  拍照图片尺寸设置% Q' k: ?( ?% @/ w
) K6 }1 {  D( u3 {
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h* c$ W+ G3 \; Y1 W" y0 h

8 H( D; t- X+ V9 i9 c; Z: @[cpp] view plaincopy2 r5 k7 y" r8 ~2 i7 K

1 m3 v& i/ `1 |9 B; e. \0 i
' E& e. K9 j5 A* N7 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  
  •    )  
    9 F  _4 Z- Z- q: H( @6 Y
! q. F3 A4 `# N/ \" W( I- [& e
2 K3 q: b: I! f9 r
4.4  Camera物理角度旋转
6 n8 {6 s! X2 }- yCfg_setting_imgsensor.h" O6 E+ @5 D, }  N
9 ]( p7 d% P& U) W: Z, l
[cpp] view plaincopy
3 y, D, |  j/ \" Q  u5 {3 T

: ~5 [2 _9 A- y3 ~
( P. @5 e: K( c! m/ B
  • /*******************************************************************************
  • * 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;  
  • }  
    7 k- Z0 M/ e6 ?# d! P

$ M6 b! U1 l1 k: E% R0 e* ~1 v& n/ O5 t5 k
, ^5 N) a# i+ X, t) g& T
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)/ X+ B4 J: }) z* y+ |  h4 w2 }- L! l
参考:http://blog.csdn.net/loongembedded/article/details/41679977& \  ~. q  s& L# H9 h5 s
$ i' x. c: W3 n3 B" l

' b* i/ j8 J2 ]! J! y看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。. D2 T! D7 S4 g9 J1 `) `; \7 e) `$ _
http://bbs.csdn.net/topics/390837150
  ~) [! O  s5 v . Q& k- i/ |, g7 p5 b  B
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。
9 q* v; o& l; g0 B
8 o! _9 G; @! nmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
" }& S/ v: |1 g8 m/ [; s3 y2 N8 B  A# v8 ?. v
[cpp] view plaincopy
9 c0 I5 l$ v5 E" M; S

6 [% P* `0 C9 H/ D4 o# j' v( J$ E: J
  • /*
  •     // 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  
  • )  + N& U9 D% T4 o. ?; D

* ?5 [6 ~* q+ b7 m" B+ F/ d& `- P$ [; R8 a' w
, o* n( J% b) a3 P, N
! B1 l! _  X7 i5 q
  p) U3 f$ ?3 O7 }
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”8 J0 [: c* p# ~, n" L) V+ X

( S+ h; q8 @! n; X
0 o4 {. z5 Q, _( S7 Q) U$ x2 b
: y: A) H4 e/ h2 V7 Y) _参考链接:, `  x+ M0 f; u  y
MTKAndroid Driver:camera( P4 m! E  k9 C! w# }) Q1 w6 C' V
http://blog.csdn.net/cbk861110/article/details/174372832 I/ I$ |3 w5 n& z9 u- g- m
$ h0 `- j6 S# I! I1 k' e% @* q

! U5 F1 g$ j! @! a5 R+ D8 B5 |: K1 bMTK cameraimage sensor driver0 g( t0 R2 T/ \( V! o$ \# L, t# `
http://blog.csdn.net/sunweizhong1024/article/details/8497790
! {" l" w7 T( Y' W9 {, z/ L8 Z
3 P. w' u0 r; v9 M' v: vMTK平台的ISP架构问题- L. G- X9 n# m/ d; o8 S
http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727. a. l" I1 h, a* y8 x
% V/ F: S' f% H( p- `( j( P. A
OV5640 YUV的自动对焦功能为何没有开启( y1 j0 a! l8 Q% ?( ]
http://www.16rd.com/thread-10480-1-1.html" M" w& W) L& ?' b6 z  X

" A/ S8 P3 A$ k% rMTK Android Driver知识大全
  ~+ j$ v: M, T; e  }6 L% Chttp://blog.csdn.net/cbk861110/article/details/409318359 `, G" ?' f( t* S0 L& ]; r
1 ?% p+ M" L7 c7 Y" }
mtk camera移植步骤
/ u9 N6 Y% J# J7 I" g6 X/ o. Ohttp://blog.csdn.net/vasvas/article/details/39250473$ \( ^0 g$ i" Y2 {$ [' u

$ u' ~8 ^! x2 O关于 前置摄像头安装0度或者180度
4 D4 b$ |$ v" }( qhttp://blog.csdn.net/kkkvvv123/article/details/8809823
$ Q" ?. h2 y% k6 O# S2 y 3 Y  V, G9 H, J+ |$ ~6 [6 p
Camera 涉及的文件70* ~- \* ?7 R5 R5 T* s
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html: F; q( B6 k. y, K  m7 x! E; ~

" j9 G" T8 I4 C. _8 tOV5640全景模式预览倒180度,拍照正常的问题
: k, C* n- }6 [) n/ zhttp://blog.csdn.net/guoguo295/article/details/21245815
8 C, U9 D6 h3 d2 m/ ]- K) R& y* f
5 K# y; X+ b& \* b2 D
7 q. ^; \6 Q& S) X4 u0 P) U+ ~

  • ) L+ ^- a- e! w: S. v' j& i

    3 A+ `# y( [$ L

* ?0 k6 u% @. _) L2 X$ h7 |0 H6 M9 X* M. X1 _/ f) b# n# r
匿名  发表于 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.