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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动' d9 b& S( \4 @
/ o" ^0 Y7 g. R: q6 ~
$ r. X* d% A5 k- H6 T
MTK6577+Android之Camera驱动
$ ?% B( I' g' p  y0 a3 y/ s& D- V

$ d) x0 k) L+ q1 Y" w/ M

  d; D% B" v1 |; k+ Z  [
图1
6 B0 K/ m+ M5 t6 x8 \
1.     Camera拍照相关概念
6 r9 K+ h# N; S8 |
4 L0 U: x$ d8 U1.1  ISP# w4 S$ P: Y  _/ H% @% I

& E6 \' b- E+ v0 wisp——(Image Signal Processor)——影视处理
+ n  n  r, c7 v1 I; N: x
9 s+ \- i0 E+ }- a" ]. m# {4 v- n. w无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上
' K. O* p7 e$ Z - z1 U2 e& M, W5 Y1 Q  }0 u
1.2  720p9 ]5 c2 h6 m$ l# H) s1 E+ X! ~
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。! a9 o0 l. D1 e6 D8 N7 _; P

% P/ V6 M0 ?% K分辨率为1280×720p/60Hz,行频为45kHz6 W3 m4 ^' k- @3 q/ K  C- K
) Z& _. d1 E" n3 l0 |# x
5 j& N; A1 E1 |' m9 f4 M
2.     MTK6577Camera控制器部分
1 A5 x. h- R2 k5 T/ d; | ! H9 U5 T/ j$ M" ]
2.1  camera控制器概述
. {; L% `! h9 S5 KMT6577 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 h% d- T5 ]5 O; C/ x; ?2 Q8 o7 _
6 i' q; n4 \% ]2.2  camera特征
; w1 \# |, Y9 P" ^( r
" e& Q/ v5 l* G6 O" P2 N7 m& fMT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。% X0 b- L# A% W
" g: ^* @( E- \
支持的特征如下:4 S% |5 D$ ?. u* ?
(1)   抓图分辨率达8M像素(image capture resolution)。# ?& x2 q: Y( s
(2)   录像分辨率达720p(video recording resolution)。9 I* G. r8 P" K4 r* y) r
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。8 I8 C) K; t8 y4 f+ d
(4)   曝光抓图率8M@7(burst capture rate)。
. b& [+ R* D8 h5 k0 l' F(5)   图像处理3 A, U1 D8 Z- [' q. B! g- 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)。
# e7 @0 X( `3 {4 S- ]  F 9 \! T/ |+ N3 R
(6)   3A统计和校正(statistics and correction)
8 W* c2 z! [- x(7)   闪烁检测(flicker detection)。# u6 z- D% O  ~( n. J# j

& o* H/ ?5 ]6 i/ W4 k& T. I* O, p3 R, R2.3  camera框图
; h+ }: J- h' z" O; m

* H0 T- k5 |& k* I
0 [$ U1 B! q* d  W) y, q; x0 u# `( I; 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)单元。
7 b4 \( j  f# Q$ M- q 4 p; i( x- c* ]% v
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
! R; i* U2 _, f9 s; V1 X% `- ]
1 v; Q0 K2 v$ Q/ `/ J5 C色彩处理单元接受来之镜头/传感器补偿(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读取出来。
' U3 t; [& X3 Q8 A 9 K$ y2 t: ]2 @4 e9 ]6 F8 o
下面给出一些性能参数:& y8 l- q, e; k6 @, P# N! a1 Y$ ?5 f

$ F' z8 X& k3 ^5 w2 H; y5 D- v
" l5 k2 c/ u# `" _; q* i; B8 D1 p
图3

- {! d- \) S9 d1 a2 n! c$ R3.     原理图设计
' P5 {' y# |7 o- O; @( y2 L
: O2 M6 G# f/ d" N* d2 M5 {MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
7 N/ Y$ b* e; S( V' L, o4 K3 Q

6 e  @' B2 Q" @. K: _' T$ t
( W4 |& z: c5 N9 \
图4
Camera sensor连接座如下:
6 R4 ~" k, f8 F+ |
8 U* g+ }6 i: L, `$ Y+ |
4 U: ?% v7 I1 q4 H# G- E# W3 u
图5
3 y7 o2 R& \- A, u7 R
(1)  OV5640输出的数据格式
6 b7 J6 p! }# C《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
' P7 M2 Q+ K7 t' ~Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
! f/ h# B( K# c5 f2 [  B: ?Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]$ @- R9 _# q( S9 f2 A
而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:6 E* ^" G3 G# M4 `+ B# f

4 X$ s4 `# @7 D2 s
4 a1 T+ H! a! y7 O
图6
0 C; a# C) @& p6 M& z$ U3 M
3 c4 A/ j/ d+ C$ \* B1 G, h# @5 G7 y
(2)  OV5640IIC地址( K3 e# C/ Y7 c' F; i
- J9 q+ x/ ^3 I1 g
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
* {7 q! C7 H9 z# I( W
  R2 G0 T1 J' Y

$ p; [4 b' l" x2 a' F' l
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则# a0 _9 f9 `. B. ^0 R

6 y- ?' B4 S/ m* H/ G! ~/ [, Z

' F3 d- y* R* d( h9 j* r9 O4.     驱动实现
, Q& e/ b( }8 J& }' F! P1 z$ I5 _4 \ # a6 c9 c/ u- l! a

* s7 `+ L( ]# G$ ^4.1  相关代码6 U  m  @: C% x( @/ C; I) S' l5 F
(1)  CameraSensor驱动相关文件
+ e2 I* f( _# ^9 O) J\mediatek\custom\common\kernel\imgsensor\ov5642_yuv
2 q. B7 g4 ^! A" m9 R7 n ' M: ?7 q* A- F: r; y0 j0 ~4 d
(2)  SensorID和一些枚举类型的定义4 q3 n* \  D1 Y- l+ ^% R, `
\mediatek\custom\common\kernel\imgsensor\inc
3 `0 l5 d9 @. ~  D5 G- D  {  s, xkd_imgsensor.h---------SensorID7 [. E$ o+ z6 J( t! ^4 y4 `8 q; O
kd_imgsensor_define.h--------------一些枚举类型的定义0 U8 k5 a8 i, z1 \9 n, @
/ P% O* N8 @$ o1 s
(3)  Sensor供电
( e3 R; V9 t' [7 G+ O6 d" f! T+ k2 x\mediatek\custom\common\kernel\camera\camera
. H- W! R% t2 {" f/ I4 vkd_camera_hw.c和kd_camera_hw.h4 X7 T. R. g% x! n: ]
/ D9 m. l! S3 M. J, [" [
(4)  KernelSpace的SensorList,imgsensor模块注册( S0 ]6 H6 B; e$ f  M
\mediatek\custom\common\kernel\imgsensor\src* h0 I% ?2 p* U* a! s) c
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载9 w; Z, g' y2 K7 ]! s

, K5 u3 O) T/ V8 z% y(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
; f& [$ ?$ R0 Q3 u\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp0 R) U& E1 G/ ~( |0 X0 q- J" H, d
提供给用户空间的SensorList
6 r; C4 B9 G0 h1 G  {
" d+ Y. Q  x: C % Q& I$ }% q( i" c  |: L
(6)  Sensor效果调整的接口( z% h4 _4 l+ q& u/ z+ s% j4 }6 L
\mediatek\custom\common\hal\imgsensor\ov5642_yuv# y8 D* e* \% g/ O7 ^  \& u
2 L! h7 n8 Y3 Y* _; q4 K
" ]( [. C% M: q; F
4.2  针对OV5640的修改
; P1 ?/ H: B" r' l( N
% f7 R, q- y8 x3 y& @4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk
0 f( r7 _# t; r  P( u, T * Y1 C$ I3 N7 s) |3 m9 u0 n0 T' I
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv4 H2 K8 X5 c, O+ r
mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。/ U) K$ J7 a2 h

- M+ [  K" @3 B" W; P% i. ugc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
, {1 {' b1 Z# [' q( Y
, M, b' d7 {# @7 C+ V我们采用的OV5640就带有ISP,输出YUV格式
; @! w( f, h- t, K1 [/ ~ 8 `, |, D& ?1 ]6 T1 e/ i/ I& W
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
! J' _1 u. [( S9 Y: v8 I3 o' l(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头6 H+ Y! N/ L) ~& A
5 s- @  B: B: s0 I3 b
修改之后的HAL层的配置:3 }2 G+ _! w, i: S7 F

4 |# X$ j/ b/ ]1 I0 r  E& A% ~[html] view plaincopy* t* ]8 w1 n' V& H# `# _3 R

3 L$ {' W  S) ]* a$ h6 G9 k9 e* P' \5 h
  • 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  
    6 Z/ M# ]8 B" @" [* C. u
5 y( _! z. \" U5 }8 u/ g9 s

9 I5 }; X4 t/ j( |( R4 M2 c, d! ]
, b" q8 D  ?& K: Y% m修改之后的kernel层的配置:
, a' H: i; I9 b# B9 p" H; S- {0 J& a& ?& o2 v3 C
[html] view plaincopy
  U* M/ T7 r& q- M/ v

' j! }2 O6 d3 C8 T  _' l  \2 q, P4 R9 a. B4 g) e& C
  • 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  ( n0 m% L- ?9 M3 C* f$ y' L8 P' ?' _
' z, k$ F5 r% @& [
7 i3 t7 u: `2 l4 i9 {; P
, f8 W% F9 j( ~* k' k- W
* f8 @2 X/ ~+ ^$ G
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:, n9 v1 w3 w  G9 z6 i* E

3 a: v3 o1 _$ x6 o' }[plain] view plaincopy
) X# M& z7 t* d+ J1 N) z
9 W  _$ z. d) [% m

& I3 Q# w; v; P. O( N0 l" E( m
  • 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 D* t2 ^7 K+ }' O( W0 A0 y* T
. r% I5 S* b2 \; |: p  J9 O+ p5 `( ]

! W3 S9 ]5 B4 Q
# w. I- l0 c, q( C
7 [7 @' L: E% u4 }1 L* T5 \/ N4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层( e; @% i3 k3 q2 }5 a2 |" h5 t. E

! |8 t2 ^- g" @+ o: v7 E(1)  创建ov5640_yuv并建立需要的文件
0 h: z4 R' ]3 _& K8 D2 K - o% d& Q3 s/ ?
创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。
, \) V* N  y! {, }* V& T& H* C$ `4 ]
: D5 h3 U: G6 \! i/ D编译发现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是没有这几个宏定义,我暂时定义如下:. P6 p% u# Y# r, y& _% M2 I1 m

7 z) [3 }  Q% z8 N[cpp] view plaincopy5 A  b9 D8 A" `9 X
- o% }7 y4 ]  y5 j' u6 ?
8 z2 L% C$ t4 \+ s* \- v7 D
  • //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  
    $ g: c+ J% }3 T2 @- Q
3 ~$ u; j! N, i% R- m* g
, Z8 r, X/ Z; J% I" j+ R

" r2 K6 I4 ~& g这是参考ov5642的相关定义来定义的。  w) f! A  [; H
( `4 c2 E; J  _% P% E6 Z
(2)  在支持的sensor列表中增加目标sensor8 {" y: n0 S8 d3 L, n0 Y
* ^: G/ J+ S, g. O0 Z4 N, g
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
/ x% b. [) ]* p% n在数组增加OV5640的内容,如下:
9 S) X. @% d7 e( ]5 a! S
: Y9 _: C2 E" Z, E6 I; N$ O[cpp] view plaincopy1 `' q6 P: V# }" y

* x, U* ?6 ?5 d
$ g# o* ^% t7 v' F' c
  • 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  
  • …………….  
  • }  0 ~# _8 N5 t* y7 B3 e* C

4 F: T) U7 J- z6 ]
1 U- l; ~/ c( ~
" o% E, I" j4 \3 q4 c* C3 k9 f5 k也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
$ }0 @5 u; j" k( V; Z' [mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h/ x$ f) u2 ?3 o; y
2 _' J3 i2 [- V* o
(3)  增加sensor ID和字符串的定义; S/ \3 k8 P4 U) M4 H* F+ C6 M
" Y% [9 H5 J% Q8 m" y
[cpp] view plaincopy4 d7 ]0 k# Z" l# A

) H4 Z5 W8 N6 z( U/ @' ^
' b; }# F. k7 i. B
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    2 c# l8 v: w% k
& B" W9 X, y3 r$ G% e/ @
, z6 |4 t) k- @8 B% \+ W

0 N" _2 j  h. ~( [4 I/ w- m4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层. z" ?- L6 X; A( y: G+ _4 C# N

: O) x  N( J3 v; R  `" ?(1)  创建ov5640_yuv文件夹% h+ {" |% c$ h
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了
- x# H2 U; V; J  ]ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:
' [4 J2 U- C' i, M7 Y* j
图8
2 @# H! F- e# E% k; D. P9 n. l
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。
2 e6 ?' G4 V& M% ~0 D6 ^; B: B, E

. s+ M& t. B* \; w
图9

5 W) i0 K! H. f4 Y$ Z此文件下有两个这样的地方不同,这里是指自动对焦模式。
5 z1 k" K; {" n  @- } 6 h. ]7 ]. B6 c7 }- j4 H
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。% w) {7 v' H2 S0 O
9 ]) b5 ]2 O5 {4 d; ^5 q" g% e
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv& g: I1 B+ W) Y$ [' F/ v4 P& c

/ G) n! ^4 ~! Y(2)  在支持的sensor列表中增加目标sensor
" {) G4 o5 _' t, @5 `+ @6 D 5 T3 y/ ^; p* \# @
\src\ sensorlist.cpp4 y  R1 n+ u8 \9 b5 `9 t

$ I+ {& M( ~! M" @( g8 Q# @[cpp] view plaincopy
" X/ T3 G, z8 L) u0 m, g" j& G
* B( C0 o  c  u

5 e) A4 c; p% M( z7 q# W
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    4 w* [; N9 ?7 G
4 n0 V$ k, E7 E3 d' ^& x, d
7 J% L6 M/ J( a+ |

* a& S9 m- h5 ~- T6 W注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
! y7 P: L* j* k$ a" p5 s " D/ a: Y# ]# |2 }  t/ \
9 T7 v$ ^9 v% T; x- `
4.3  拍照图片尺寸设置+ c" j* y6 }, s! [$ g8 Q. ]
9 |( G: f( E/ a
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
0 K$ u  Z3 ?6 N  j- }. f
- {# \% g6 \3 w9 N) i[cpp] view plaincopy9 q9 S7 \2 V# k5 B3 h( F" @; i
; h' ?1 B, v3 x& R) e

* J5 c! S7 O( Z5 T& 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  
  •    )  9 u7 _* z# g' k! F$ p7 |% I- ]9 E

/ o- o1 d9 p7 Y+ V2 t* m& m) D  G* N$ a# A. B
4.4  Camera物理角度旋转, H# k7 Q4 U  R: }+ P1 D
Cfg_setting_imgsensor.h
8 |" q  y  ]: W( p% C/ O( q
. _/ s& h  l, h0 C: {. p% ^( F. M[cpp] view plaincopy
  w& ]: C5 E: K1 y' T5 I, u9 i2 z

# h' V" N- b; N  x/ n  ]1 ?9 f3 V5 e! z7 T, Z
  • /*******************************************************************************
  • * 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;  
  • }  
    3 ~& h# Y$ |1 g  s6 l/ h$ a; x
4 B! O$ z0 |& Q2 F* U! {6 C
4 N* \6 ?9 b" j
5 G0 j/ g7 J8 U( J. O* a  c
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)
+ e; B' Q. G( g' C5 d1 Y参考:http://blog.csdn.net/loongembedded/article/details/41679977
2 h  E; @& @) S ! }" y0 Z! Q5 Y" q* z

$ I, U! c. i/ B/ D) V) h看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。+ J* k1 @; M1 [; }
http://bbs.csdn.net/topics/390837150$ K: o4 ]. h2 g+ J" F+ e

! p$ m( G) r6 y5 T可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。4 @! `. {9 K1 u% `6 N6 B4 e1 j

6 e5 K: H+ |3 o+ Cmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
1 h* o" A( f, b
% H/ n. x" N- j! W+ ?% @[cpp] view plaincopy
3 I! U9 i& y* h- p' \: A  J/ {$ q4 R
2 w% d  i2 O3 Y9 x) F& g4 a

9 Q+ U2 m3 G" X6 c5 v! |2 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  
  • )  
    * d/ b( `! s0 m

7 b' K" i$ e* p1 @" a% N8 t
3 ^, l; k8 w# R4 ^. f: j9 V# N$ r# f+ y: z$ [' Q2 _
* B9 _6 A7 @# y9 U. Z

. e/ F: [7 N# K5 v( q我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
; u+ s* G: n6 f$ d% e
5 r# M" U3 D/ @+ c
6 P- o/ L5 e; W+ H ) j% r0 Y9 v  ]( f, ^
参考链接:& @+ S1 \+ n+ o7 F
MTKAndroid Driver:camera
: R' G. N* C9 x$ @; y1 S! p( ~( jhttp://blog.csdn.net/cbk861110/article/details/17437283
7 J9 A- _, M( F$ T8 g4 N5 X
$ b9 F* ~* ]7 J# V$ L4 i
( p1 A4 P3 `) C2 d5 q$ n' xMTK cameraimage sensor driver
9 W9 {- d6 g. C+ A8 s  Fhttp://blog.csdn.net/sunweizhong1024/article/details/8497790( O) S5 X) {! }$ X
4 P5 [4 r# ~. W$ ~4 A
MTK平台的ISP架构问题
; ?- `  g; `% yhttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727  _+ H$ b0 l! K

+ R" {) G% n; i. ZOV5640 YUV的自动对焦功能为何没有开启
1 e$ Z. @8 q5 ]$ zhttp://www.16rd.com/thread-10480-1-1.html" w9 t$ y2 ^2 l" i6 q- i% ^' J
( d: N) L+ n$ O
MTK Android Driver知识大全6 g1 @' K# x) s  L  f+ i
http://blog.csdn.net/cbk861110/article/details/40931835
7 z& d0 e$ c: r6 n% ^ & g% E) g% F1 x
mtk camera移植步骤# f" {9 V+ R# k# G' N, N" b
http://blog.csdn.net/vasvas/article/details/39250473+ H% t9 B1 v2 K3 E
% z; I. \9 i) j  M( Z5 o% g0 Z
关于 前置摄像头安装0度或者180度
% v8 b6 B3 Q9 l7 [3 P6 Vhttp://blog.csdn.net/kkkvvv123/article/details/8809823
( [4 v% K8 a# U5 y  R0 V' k ( y7 o- @3 ], o( q6 y, c( V
Camera 涉及的文件70
  U4 c# m. L& {http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html
7 I* b+ I; Q; c3 C- k7 S: _
: }3 N. {# S: [: ]OV5640全景模式预览倒180度,拍照正常的问题2 [& O4 x2 q" v: V5 h, F3 n
http://blog.csdn.net/guoguo295/article/details/212458153 ^5 b5 J/ ~$ ?/ `( N5 d# k

8 v" U5 Q! I+ \( J
% q4 ^+ j2 ~- Y/ e# q$ d2 N

  • 7 ]" m. h$ g/ G# Z# R$ V

    8 a. S2 m' g( T/ M; v  I! G

9 ]- [0 Y& \" E
0 E  n0 p: m, @% H, P- {
匿名  发表于 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.