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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动+ ]* d  W8 {0 f& ^7 }
+ x4 ?. e) n/ P% ?
0 \2 e9 K3 ?9 B5 f) b
MTK6577+Android之Camera驱动

! |. A8 D# M6 n8 W% Q* }, `
5 p  p. {  B& |) D$ S

# A' N2 X  t2 Y$ D; g* \3 W
图1
9 s( ^, `! C/ {; h1 x
1.     Camera拍照相关概念' ~- p6 Q8 s- F2 N8 `/ a; P

, T3 K; o  `; y0 R( H( Y2 y) H1.1  ISP
/ Q4 O  \) F6 @# c
9 @7 C* _0 d* C* K, oisp——(Image Signal Processor)——影视处理
% e' E( W4 ~* |# ^0 Q7 w
4 d, N+ V$ L" `' M* Z0 {( j+ L无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上7 e: d3 G2 ?. \. {% \6 g

% ^: c# t3 R# m, u1.2  720p
( q3 q4 e& S8 K) Y9 _+ m* [720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。
% E5 v, P3 i/ o- v, H
; D5 l8 g7 i1 Z0 O. X9 E+ [分辨率为1280×720p/60Hz,行频为45kHz
# f% d0 |, I' I* c9 _ 1 W3 ?+ D) G' H2 n- x

( C& `4 Y1 [. u' D' k5 `) g5 v2.     MTK6577Camera控制器部分" W6 b5 Z' M8 P  P0 t, E

# D) ?( K2 M, N2 K9 U2.1  camera控制器概述! P" }, p7 q3 [
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)这些特征,用于图像处理。
3 L( g! A! q$ r8 h 7 p0 c$ o( G* o6 V; ~) ]& h
2.2  camera特征, f# m0 v+ ?5 C8 Q  \# K

+ g6 k) f, X% j4 [3 gMT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。& P& ~1 j! B0 \. G# ^* C
: e# i* }$ X6 ?2 Z4 w9 [% G- l
支持的特征如下:
, I$ m, j- }' P4 h) d3 t(1)   抓图分辨率达8M像素(image capture resolution)。( o; g' `( V. P# u& j& x
(2)   录像分辨率达720p(video recording resolution)。: m6 ?( u! H  k4 }; Y! R
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。
& G8 x) {- E" X. J(4)   曝光抓图率8M@7(burst capture rate)。. W; Z: [# e# @  P8 C, g
(5)   图像处理/ v( z& T) u  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)。# G! }+ F! E$ S; j
+ N! u7 q  U  ^7 l# n
(6)   3A统计和校正(statistics and correction), i5 j, L8 P  Y
(7)   闪烁检测(flicker detection)。
/ T# C/ f, E7 Z) H) g) Y6 _8 ?, A# E1 Y 8 D, h1 D0 R5 J, C# ?
2.3  camera框图0 J1 J7 l3 U  v0 [8 y

- U. U. w7 G7 C

! y( L$ d: v% |- X4 H$ S9 B; a
图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)单元。
$ V1 y9 ]$ Z1 R- b# S1 T# J6 _4 i( m : E1 v+ u, w( Q3 \$ y
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。6 g8 o. _7 Y  c1 F: G2 t

! g9 w& ?) 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读取出来。
% |6 T8 Q3 q2 F% o! ~
) U1 B2 o7 l: A8 ]- w  N9 ^4 N下面给出一些性能参数:
$ C% ~6 `; Q; a

7 k8 s( I7 x$ ]# {- d- L$ l

/ a1 H- M' R7 [+ X' l7 I
图3

8 y$ o6 E- u( @# c' U3.     原理图设计! K  U6 l: m: D3 F# W8 R* a' B

7 |, f% X0 J5 j% t* p+ {1 rMT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
4 }7 T( q3 s, x& O; E5 H9 B

# x- M+ z( ?9 i0 j8 r

, s' H4 h2 B4 h$ W( `9 s9 P2 @% ~
图4
Camera sensor连接座如下:3 e5 _; u7 s4 |8 J! c
# ~. U, a$ m$ G

! |% i& |+ L( Y
图5
& [/ r4 G! f3 |  g% W
(1)  OV5640输出的数据格式
6 S& P1 o' }. d& e1 \; p9 e《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
" `* ]$ c% O7 H1 x6 Y7 cSensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9], K% i9 E2 s1 f. E) x4 C
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
) S! q4 h- s5 Z% n5 J而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
. p3 a% I+ Y9 N3 c

; C( v* N. [0 ~: I! Q6 A
$ }; N4 {7 W- G7 N4 C
图6
+ Q+ [6 N  _1 F  P6 H; i* T8 u4 M

6 M! S+ V. g2 S- f7 z(2)  OV5640IIC地址
+ |: L& q) l. {( m" w 6 g- L* E9 E* C- b1 Q
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:  S9 Z( e& \) a1 Z# K

, q4 d/ G+ R( H
, E* g+ O3 ^9 p4 o5 d$ }6 u
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
$ |: ]! k, K, X1 l
4 B- F; u: a! o$ }( j) [

& y1 d3 d# a0 {) N/ A) G4.     驱动实现5 @0 i0 p' R# R( `# ?; n0 S- a
0 `( j* v- F0 d, R" o
# `5 z7 c4 D, I2 s6 i+ |5 G* S7 B
4.1  相关代码
3 l' M& k# S0 `  L(1)  CameraSensor驱动相关文件
6 @% Q0 Q3 G% c  n. H% v. L\mediatek\custom\common\kernel\imgsensor\ov5642_yuv( L: d  t9 j: f! r8 ~/ O% P
. B9 Z- @" X# N( p
(2)  SensorID和一些枚举类型的定义8 b& A6 i9 u0 n% e" m4 i+ g, q$ [
\mediatek\custom\common\kernel\imgsensor\inc9 Z7 ]4 p6 @; U1 P9 g0 ]( z7 p
kd_imgsensor.h---------SensorID
  d# R  N, }8 wkd_imgsensor_define.h--------------一些枚举类型的定义
6 l# K& i" i' y5 t( ?( B) l, W  S3 A $ z; V* V8 Q; r# l$ q
(3)  Sensor供电
% g4 ]8 U1 c. L* C' o3 y. B1 E\mediatek\custom\common\kernel\camera\camera
. f, F( n4 e7 {% xkd_camera_hw.c和kd_camera_hw.h
7 \$ m/ Y5 m% H' R% O3 @+ h
/ ?( t! E( `6 D' i( h/ N/ _) O(4)  KernelSpace的SensorList,imgsensor模块注册) |$ @" e/ F; |# [& ^7 Y+ W# {' r
\mediatek\custom\common\kernel\imgsensor\src5 H! }- u$ |  s3 m; F' d" M; I1 j. G
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载3 D( P$ ?' a" a

# f8 `4 j0 `, P. I(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
+ ~/ K0 E, c% K; P\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
. x' W$ `' ]. s( j0 P0 x1 r; r提供给用户空间的SensorList
) c# c: I" e5 O; g4 f ; E9 |, \' ^# s2 D$ N; z7 r

  v: }  g$ {9 ^) |(6)  Sensor效果调整的接口
: z. L1 ^. ^0 n" D7 i6 w. w\mediatek\custom\common\hal\imgsensor\ov5642_yuv
) V2 T0 B) A; P1 ~, G 1 j* [* n9 C! Q% E
0 {4 O/ @6 B+ b4 F/ \) a
4.2  针对OV5640的修改8 d- E# v: [# ^# W* y

* R  s) N# Y% i4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk
) i6 _. f  W6 [! B1 M* u6 P , u$ t6 X& {/ i; c
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv7 S  o. _+ G: B. R: {
mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。3 ~& \# v6 b! y

9 {, X/ g+ X& _, N5 |gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
+ e8 q2 {& V/ j2 t9 W' a' d
8 i. S- z; ?3 I& N$ {我们采用的OV5640就带有ISP,输出YUV格式
  Z8 ?% @+ H  s  f' y
2 E) U4 c* B( Z, E3 {" x(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
! Y  ~* r$ L( Z: }(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
& A# i: {5 v. Q0 g+ ^ + Q/ S6 s% u9 u6 o) e& C, g/ {3 l
修改之后的HAL层的配置:
. I# {- d2 |; K( W' B/ [" n, m# @  ~: l
[html] view plaincopy
5 s0 v. C" a+ t) r4 v
7 ?. n' }* X$ M; \
6 u) N$ r" q( ^- V, ]2 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  
    5 o6 {2 i7 y" m% i: k% Q

3 V4 x2 c3 w! q# B% D5 v5 Z! e
7 `! Q! `3 K( B1 D2 X" ]' a9 }0 m: M. D
修改之后的kernel层的配置:
' F! T8 d/ e+ E4 B1 T& x8 B
1 ]- u6 r% V. b4 ]; v. ]! K/ {; u[html] view plaincopy, ^$ ~0 `8 O: q( j( T( [
5 q. z+ P$ B! ?# b$ s# z) H" X

& [, f: F. z% @0 O0 i
  • 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  
    ' G4 ~. ]: m* ^
/ i  H) Z2 T! O6 R0 x; J" V; A

( e$ ~0 @' n( @+ Z3 y) e! y- u
; X- m$ I/ L1 p# t4 [+ x
' e3 C6 Y+ ]* W) h0 J虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:; a7 U5 R, {- ^. E

% F0 ~$ e* u$ [0 F[plain] view plaincopy  ~9 v$ |) u: K1 X" d: ?! t- T

1 r9 i4 _0 B0 i! g5 ?% B: S, E6 o9 M) 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  
    , ~& z3 L+ X5 `& w) t1 H
1 I4 F! I2 d' H7 B
! V5 s4 S. }! W, _- @7 l9 L7 m

- r0 z% _, n$ D3 Z& k. `
% V  t/ k9 J) e- H- P8 S& {4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
4 Z9 X8 o* B8 S- V- t9 _   v5 y$ o+ |+ H8 w
(1)  创建ov5640_yuv并建立需要的文件" N( ^% E& @$ A: T% h8 ]3 y
4 q1 T# }$ L% g5 {; T
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。! i; n7 ^! C7 ~+ L
6 V2 m, D( S6 d- i! W1 k2 Z
编译发现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是没有这几个宏定义,我暂时定义如下:- E9 m2 t9 B7 L0 ^
: r# }0 U5 k8 S8 n# D+ {: K  X
[cpp] view plaincopy4 |8 C* z+ i8 k. u- c

0 f0 R( j, N& q1 V8 x( K/ n0 J$ n" I  s
- U2 k+ O- n) |3 x2 t
  • //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  
    ( x, Y/ E8 a0 s  Q* P

* }- m1 h" ]! k2 E" e5 E9 L& J7 `
% v7 u, r0 g7 m- ?  E7 ~9 j$ ?6 S$ _* @8 [" T" n
这是参考ov5642的相关定义来定义的。
4 D% J/ c% P! y5 @7 C( E  e
  c+ t2 W6 K; v! v3 y, x$ B2 _3 u(2)  在支持的sensor列表中增加目标sensor3 L  s# e. u' R  v3 }! ]3 T# @

2 o' Y2 p& q8 d% C; f2 |8 U6 k/ amediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h0 E6 s3 G1 z) {- ~0 Y1 h
在数组增加OV5640的内容,如下:# e3 ~1 i( f! i& w& \. u* [. ~

% r  X+ A9 q  G; w5 y[cpp] view plaincopy! P. v6 o6 z9 J+ G! K# J
+ h' j% u8 L/ _$ c6 x/ c" B

+ L) k, g! V7 D. V1 W8 \3 b0 }
  • 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  
  • …………….  
  • }  
    7 W5 c* b; A* S
" W  n+ m' C$ {2 G" G4 {4 R, ~
* d, S( R" s) [) ]+ `
( c0 s$ A+ O0 y2 e% B2 x
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
" S/ y( t3 j3 ymediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
- F$ d0 Q7 Y2 X7 q% I 1 v4 P% b  Q/ c/ d3 j: F
(3)  增加sensor ID和字符串的定义7 U" @) t8 u+ t+ ?( Y

) a# A, Q( u8 A[cpp] view plaincopy4 s. S' J/ B% M4 c

# o% Q9 }$ [; e3 q3 S% W$ l0 r+ G5 X8 k; ~1 R; ]1 e
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  ! `) m1 k2 @. e/ ^2 G

% S' q9 o& X8 F
# C# j' A5 A+ O" E7 I  N
; g+ f; p' i, D+ p4 G4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层2 K$ M* Z* M/ w+ _) Y# Q) f

1 h) |" p# M9 K* z/ O, D6 x4 n: R. Z(1)  创建ov5640_yuv文件夹
4 t9 Y1 R- Y8 ^1 b但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
' f, y) `6 S8 A) ?ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
7 v3 L( f$ c" C! Y" J' b
图8
7 [, ]5 g1 [" X" X5 T: r# K  j
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。3 k+ B. C7 {% E, f
$ W; W' t8 ]! X3 e* Y& |) H
图9

+ \) H& ]  i/ h5 c此文件下有两个这样的地方不同,这里是指自动对焦模式。
' h2 B& ^; S& Y6 |  A7 B
4 |; Z8 e6 d$ J9 \/ S- ^因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。/ W( y/ k( L. h- k7 T

1 K9 Q& F% B! W所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv' T3 |; u" _9 v% G2 G

# D4 d) O3 s& v$ V+ M7 C7 t(2)  在支持的sensor列表中增加目标sensor
6 m- B2 M7 q2 n; @* M
& R3 {/ \8 n( }8 t! W9 f\src\ sensorlist.cpp& t, k4 q2 N, H7 _5 p6 S) d
1 ~' @2 D- T; w* M* N2 Y2 ?- L4 m3 L
[cpp] view plaincopy4 S' h4 M# J( Z! Z) [
# \8 i0 d0 ?* l7 a" q9 a" {- I
' T7 _# M8 j1 a. ~( h5 G
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    3 r2 g1 G: F! C9 w4 F
( n$ I3 v; i7 V) G
/ D& H6 K6 a- Q
& t' @; b  Z0 T9 E2 j
注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。% O8 I4 R5 U) i! i

( w6 X4 t8 ]3 _+ y1 e7 O : ~/ J4 Q4 a9 I/ }6 T
4.3  拍照图片尺寸设置* H  ^/ Y+ ?1 n% m; V

3 A2 k2 G: n! o* C! z+ Dmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h3 {! P  g# {0 J: m0 [4 G
" N. |3 M, E$ F( E( l
[cpp] view plaincopy7 F$ e& n! C; t" O* n- Y

: h& C( H3 r: l) @2 t8 \, b0 ~. w4 H% O% J1 b
  • // 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  
  •    )  
    ! C4 \) @% |! r# q
" K0 i  ?6 d- W
- T! O" O4 o: M2 u6 t
4.4  Camera物理角度旋转
. N) y3 j3 a, B3 `) I* GCfg_setting_imgsensor.h! N- P9 D  x3 B% z6 [/ v
; m% [2 g$ w. y7 [
[cpp] view plaincopy
+ W' K: e. y; j; ?# v
- W4 T8 `( b& p6 }, Z3 M
9 ]$ O0 Q) h/ U( G0 Z0 a- m" q
  • /*******************************************************************************
  • * 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;  
  • }  
    # b0 R, i5 c# s; Z& k% I
# R- v6 L& F* [" h& q8 n5 t" _

' N; U2 g' U3 H( W7 Z
2 p, v4 j' |$ Y1 W/ R  v这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)9 B2 b  d( [; k- X2 h- l( q3 r
参考:http://blog.csdn.net/loongembedded/article/details/41679977
1 {( j/ ]9 Z9 f7 j+ g- \! P8 a
  y& t0 Z: G; a( i& Z/ h# S) m7 ^1 S
+ S$ u3 \. ~) w# {# G
看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
( k* \( `# G  i2 |" o; Lhttp://bbs.csdn.net/topics/390837150$ a0 T% ~( t! v, o6 d
. K# f& D, F+ q/ g
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。- E$ {  _9 u5 {* C. g. o
* i( [- `8 }/ T# U- ~! w) V
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
6 z/ u9 i1 @# Y
- q2 b- `& R" _0 T0 `$ C* p' r) @[cpp] view plaincopy  B# p. S6 u' r  r/ \$ _
; K( {4 ~( Q" a/ T' @
) g# c3 \; B( b8 x' T3 {
  • /*
  •     // 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  
  • )  3 v5 R0 U- I/ c' G3 [  _" ~9 s6 q
* E# V# `1 u2 k( r7 V9 ^/ D, Y

: r9 P) c( j* N% ^4 _* H! I1 }; e& J
' \: ~8 h' |; L; ~& [3 L/ O1 o" _' A% g( ~
! Y. x. |. t/ a, f
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”# O. U- j0 M, z- h: @  M' T4 h

8 q+ q1 S6 m6 \6 z$ P# I  a
0 u+ P1 ?, U2 L( J, X& z
& c/ o5 m/ |% K% {' e& P参考链接:, q$ f9 U+ V2 N! D5 m% u
MTKAndroid Driver:camera
5 K5 A# u+ d% G8 i! d5 Fhttp://blog.csdn.net/cbk861110/article/details/17437283, _1 K( y7 @& F4 a; U

9 `6 |3 J0 f* }( c1 L9 ^4 d1 r
5 B0 i) H$ E3 Q% e+ PMTK cameraimage sensor driver# @, ?# S0 Y  C
http://blog.csdn.net/sunweizhong1024/article/details/8497790
7 ?/ K4 l* |7 _& b; |: t
# R6 a- d5 l& ~4 |8 P0 s1 @MTK平台的ISP架构问题: Y' \, w4 x/ I
http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
. Z: ^9 m% |; G' \7 u. F1 k2 C1 w # @& w6 e4 ~& H, L
OV5640 YUV的自动对焦功能为何没有开启
9 v* a6 ^5 J  z" ^- C, L* vhttp://www.16rd.com/thread-10480-1-1.html, c' E+ q# r! g7 @  @
8 t' b) B# H* w1 U8 m6 k# J+ _
MTK Android Driver知识大全
+ s1 i: r- X7 O; x8 U, ^http://blog.csdn.net/cbk861110/article/details/40931835, k, e( [1 c# J
2 B& T- W. W2 ], Z! V7 T5 {" `
mtk camera移植步骤
0 C5 `3 u/ m* f. f, h9 `http://blog.csdn.net/vasvas/article/details/39250473  ~( I7 U' z4 y- [6 l
! d  S, I) t8 t' ~0 U, \4 n; G
关于 前置摄像头安装0度或者180度: v5 x( C/ X- ~- ?1 p2 {, g, @. U' g
http://blog.csdn.net/kkkvvv123/article/details/8809823
5 ]# \6 C* V1 P/ k5 ?
# e# o8 _8 `  [Camera 涉及的文件70
2 [  Q* v, ?* ^1 Ehttp://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html- N- ]; G$ v) c# ^

* K7 \7 G" f4 Z+ u: Z+ rOV5640全景模式预览倒180度,拍照正常的问题: L! @4 y1 z+ k; a' E- |% x# T
http://blog.csdn.net/guoguo295/article/details/212458152 j+ N! W5 w) i" ?
+ ~8 m  B, }3 j% T2 \% w9 i8 [
7 H( A3 x5 E+ i- u' o) F

  • + p1 a- ^( w  }7 Q

    4 Z# U& @3 n5 c; g* I  t

' x  w) ^( b: E1 ~) ~, W1 k/ x  a) P# i9 P0 a5 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|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.