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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动
6 N  v/ n+ L5 l) n% i  I% @7 D" [
, y8 `4 Z5 I8 t' i( f! v
% B- I- ]+ d2 h0 \5 x
MTK6577+Android之Camera驱动
( V  m' x6 i! |$ z; e/ F( K$ x0 I
9 s5 i" A( v. c& {' r0 y/ I/ v; b+ }# n
: k4 E# V5 X( Z3 I& Z4 }3 l
图1
2 S7 z' x, S, n- H' j
1.     Camera拍照相关概念9 X7 j& i$ [) a: [6 a

% _4 F6 A* L; _/ \$ N+ m% m1.1  ISP
) h  {: ]2 z: s) C  m' E
) \# |3 b# X: z/ G3 R3 M( R( disp——(Image Signal Processor)——影视处理
$ ^. G) G+ i7 s8 [. [4 e
' u2 e# L6 \, ?2 U无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上
' X. _: E+ r  S& \1 b 0 a/ q' c& s/ M8 N. |
1.2  720p
5 r" C) E6 F" G+ }4 y# O) M* w, e720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。8 A8 Q) [' {) |' V4 R6 r8 z
9 b7 }4 X. \* q! ~
分辨率为1280×720p/60Hz,行频为45kHz
3 i9 b8 Y) N& T6 w % k9 v2 ?5 H1 M7 t0 G5 x
5 \' F. ~/ x0 B! ^- L
2.     MTK6577Camera控制器部分! H  _, O' d4 }* Q1 C3 E: Y

0 J# v, @% l3 I1 I2.1  camera控制器概述
: ~, X/ z% _/ U4 N" P8 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)这些特征,用于图像处理。
! I: @% l' i3 R 3 C. V3 b/ b# c( f7 _
2.2  camera特征
& g& E" `4 ?  g' m$ H3 Q7 d ' q. `, h4 I' R( {9 `
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。
& w0 m. C$ N6 D6 ~+ ` , q! o5 P6 h* [" ?4 K2 b* m% K
支持的特征如下:6 }9 B# `- ~1 n! ?4 Z& s0 G, H$ M
(1)   抓图分辨率达8M像素(image capture resolution)。
" h2 X4 s1 L7 i9 a9 i% f6 P(2)   录像分辨率达720p(video recording resolution)。
1 ?9 j/ s7 K- E2 W7 g(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。6 R0 i# k% h" O$ d
(4)   曝光抓图率8M@7(burst capture rate)。
; X4 V; e2 M' ?8 ~+ c(5)   图像处理
- \1 H! L6 w; G) N; |& _& {6 t0 ^0 ]低像素补偿(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)。
, w8 @& a# a8 P6 L
* d" ~2 |& x* {* b$ k- a% b1 n(6)   3A统计和校正(statistics and correction)
& j1 Q  X5 s* t2 Z. J, l(7)   闪烁检测(flicker detection)。
. m$ J' o; S% x4 F
/ t' W* k8 p/ d0 A% z2.3  camera框图
' h1 N( M2 c  B2 i$ \) C' \

9 x- X& w- Q2 v! Q7 h4 X, y  O, j

5 i; M3 F0 F* V/ ], W- D& F
图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)单元。1 \" s3 C0 C+ c

. q( A7 J, s' z- L在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。
3 G' j  o' q2 b( P) B( r/ Q3 E) t7 {. ~% \ 3 }6 T+ ^1 }9 r+ S# d
色彩处理单元接受来之镜头/传感器补偿(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读取出来。% _0 W& {" Y$ m4 X

! V- f/ Q9 V' G$ N9 X5 M; @下面给出一些性能参数:
- w. M% R; J3 C) d6 D6 p* o6 Q
% w6 i1 p" |" T1 R6 {( g3 a  v, y
9 T. g1 |) I* |% T# Q+ P
图3
7 G6 T& q9 i0 }7 p( j$ q. O; p
3.     原理图设计
3 h) \: c- P- J
4 e  d0 M9 a- [MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
6 m5 r3 i# m  S* z+ h. U2 }1 ?

; D7 `) q; v6 X

* D  [- h% e  H4 J4 N& z" u, j
图4
Camera sensor连接座如下:, w4 ?$ t: t0 W4 ]8 A9 U% a

7 I5 s2 L8 T4 o

6 Y+ n3 m9 H0 Q
图5
6 L, u, c4 W: d3 w, R8 I; E
(1)  OV5640输出的数据格式1 t. m) o) e6 u- [: {
《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
3 s  l: h" Y1 j" Q+ H+ C$ cSensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
6 N3 r5 s+ Q8 l' z7 g8 I" H, g; Z; NSensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
  G5 U0 F% q. ^% ~' V而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:; K6 Z' S( O+ {: F" F6 w! {" x' |5 k1 m# j
/ x1 ?" F, @, }8 v9 J
2 \* C+ R# k" m1 Y& P1 k
图6
% ~+ w0 i/ _; `$ f' `
( @- D1 z; a0 C3 G9 k
(2)  OV5640IIC地址
4 I$ Q8 \# K; U' q* D0 ^# r/ u
6 H- D3 f/ x3 a; QIIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:, D* D4 ~/ \# }5 R
; p8 E8 C1 K8 N3 f0 v) }
% n6 \7 j7 Y3 Z0 [( w
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
, w* p, T, T: @: f; v# ^
9 d& G6 \1 G* V

* l/ h6 s) |/ o! f4.     驱动实现
9 C: Z# `( {1 F+ y3 b" Z) t * ?: y3 q" m! r
! W) D: V' g  p, x) b$ N: |4 a
4.1  相关代码
& }. j7 D7 `" L' I# g; m(1)  CameraSensor驱动相关文件5 W( k& l3 N/ T
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv% c5 t" n- a  J6 h7 Z" e

9 v8 e0 K8 n3 o0 I(2)  SensorID和一些枚举类型的定义' c% E2 _+ _# h' m9 B9 y
\mediatek\custom\common\kernel\imgsensor\inc7 J) V6 C5 }2 o3 S+ G
kd_imgsensor.h---------SensorID
% _7 i( ?1 G+ |+ `5 }kd_imgsensor_define.h--------------一些枚举类型的定义1 C/ P) z2 r2 Y
& \+ w* O% y5 l* y( Z+ Q* _
(3)  Sensor供电
0 ~+ I6 @; B5 b2 i\mediatek\custom\common\kernel\camera\camera: ^0 g1 Y  ~7 x
kd_camera_hw.c和kd_camera_hw.h
- k! ~) {$ k, I. ]+ H* M; b& y& K
! ?7 a# f/ J3 B: z7 P2 s(4)  KernelSpace的SensorList,imgsensor模块注册) K( M( A, k; z7 a: H4 @- I
\mediatek\custom\common\kernel\imgsensor\src
% D  ^8 z9 d: E9 l7 i& vkd_sensorlist.c和kd_sensorlist.h-----------camera模块加载
; Z" N4 p$ a8 f! O: F0 X: O* |* Z 1 v0 k1 E+ y3 m' Y! p$ E9 c
(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
7 h2 A: p- T* [9 r' v\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
" h5 |6 g% Q0 ^& T5 Z提供给用户空间的SensorList( [3 N% g/ f0 T* I2 _8 e7 J6 S
/ U" S, p; ]8 g1 W; s7 H& [
# m! G6 D- n& J7 o
(6)  Sensor效果调整的接口& y8 J) P. [1 h: M! v
\mediatek\custom\common\hal\imgsensor\ov5642_yuv9 }" A! L( F& V# I, x) P

4 d( j% Y6 h: K' b # e: R" ?1 q  Z
4.2  针对OV5640的修改' Z$ e! C8 _  x& g8 [6 F

5 @! T  F0 k  S1 u! u+ b4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk& S" _8 _% U" k2 a- h$ f# }
( `, v" N9 o; e% {6 t
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv! X6 U8 |+ q* B2 d6 Y
mt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。# Z, p, Y* W# R4 ?: N7 G

& y% R& W) ]* f/ j/ A2 w4 H4 i8 Egc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
1 ]3 Q6 J8 v6 C1 F8 L, O  D
/ U6 b4 \" A+ `$ z! Y我们采用的OV5640就带有ISP,输出YUV格式
8 W/ t0 W1 r' h( F5 y4 ] : f1 B( N. a" L5 l2 D2 ~
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
$ L0 J. X' ~( j7 D- J; ~: ](2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头1 S+ R2 I: u: A, m6 ?. Z: }% o( A$ Y

& o5 _4 e6 n+ |4 x修改之后的HAL层的配置:, ^/ \6 \) [. y! x' o# x, [
9 R5 {  @8 V3 m' J+ q: h
[html] view plaincopy
$ p; }: X' d: V) w( {

7 s; {% w: d) m1 M+ P( }; N
, c) \, b- e0 ?1 c
  • 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  3 b9 `) C+ N  U* b$ t

  f- A; d8 |! f: ~, @3 |  F7 W! b# c+ H5 L2 K- U/ W

4 f2 T- Z' P9 c" \; E0 ?4 }修改之后的kernel层的配置:- d( l1 _- q6 G8 v6 t
) k% j+ e* W6 V' E
[html] view plaincopy
/ _1 h7 I- N  b( X9 s% |

9 h+ u$ O4 E6 T# |; ^, E
1 X  h( V% _1 \
  • 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  ' s0 A  |" [( k; a  x0 r

' I* d* U' W+ b" ~/ r: I2 d4 I4 K1 J6 o6 S8 A2 _

- h4 {. _6 b; X0 g! o- S! v# w: C+ z1 T& f
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
9 M( N* S2 S. i% l: N5 H' f1 C3 h& c  n# l, S) q
[plain] view plaincopy8 J3 r, O) [' c+ a: \% v3 e
7 b3 _% L' V* S9 U* \! O8 o9 i

4 l. X5 D) ]3 J
  • 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  9 y1 i0 c' Q( M$ [4 @. k
( ~9 L) X/ S, N7 j/ `: E; l' v

1 I8 q# M" m9 \  ~8 V' d% M0 b6 b5 d: M) l2 _/ h" n

# b; P( I  {* X. P4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层/ h! F6 Q1 @* ]4 B4 w, |2 T0 Y
: G- x5 W) X: \  O
(1)  创建ov5640_yuv并建立需要的文件
% o% V+ b( q+ \& c
7 J- V* y+ Y+ h- v: M9 q' N3 P% a创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。# Q1 j; h/ }" g3 G  m# g; x
2 r5 i& F1 t7 s. F9 s1 k! v9 p% ^
编译发现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是没有这几个宏定义,我暂时定义如下:
7 ?2 E! }) r# v" y# j' A3 d1 ]$ ]% y3 }
[cpp] view plaincopy( [/ e! h9 ]: V1 k& X) D. d

( j" I  s' y% W8 m2 g- {% H8 j  I) k5 O
  • //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  , b4 W5 K, j, I6 R
* a; U% ?& o( i1 t" ]
* q2 h' z& C, G3 o+ ]5 S6 ~5 m

1 F5 ^: A6 h- L. a0 \: \/ ?! W这是参考ov5642的相关定义来定义的。
. C' M7 p; ?; ?
; T0 N& |8 [- V2 k& m5 w: W0 N(2)  在支持的sensor列表中增加目标sensor- V, P. U/ s7 y* n; P% e

: O. x5 \3 t4 i9 U  u( ^mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h# |5 G$ v* l8 w
在数组增加OV5640的内容,如下:$ x1 r* v  |9 ?2 `
, W; a6 ?: u* o2 _2 o! I* E# ], W
[cpp] view plaincopy
: x6 i9 c8 C' z% E4 _* k3 X

1 E7 k% X, w) e4 o
$ O% M* L* K. j1 \
  • 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 r. P: v0 z( [* A

1 `6 N- A- S* k: X$ O9 d) M  F* q' T4 U: d  i7 b- ?* Y- _
. k  F% V; I0 ^& Z2 [, q9 J
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
: l: [/ i+ W* l. A& I% |mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h
, f$ i& C1 e( T4 m+ I: D / u* k) B" p/ P  \" X& Y
(3)  增加sensor ID和字符串的定义
9 S  n' E/ e6 q9 @$ B
0 @5 ?! f2 W4 B# @[cpp] view plaincopy
& v6 O% i. D* M7 \, H" v" w( u
( L- a: r6 }" Z+ S2 Q" K

$ J3 U: G) D8 M$ C% f) }
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  2 l4 v( Y- ~( D9 I
! g2 ~7 t& Z" Z; O" R5 N+ K

1 T! I' J+ e+ \: y$ S* ]( E8 u' u" O
3 b$ G4 F9 v$ R; ?6 L. |, d+ F4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层) ]' o' E2 I8 S1 z) e  g
3 O. W) o& o$ F1 A
(1)  创建ov5640_yuv文件夹
( d; T; i# n! R但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了$ ?3 j  A3 u+ t
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:: F: I0 m, o' I/ _3 f9 }5 r2 x! D0 J
图8
; `! G1 d* W) O3 m" F( v
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。9 P% Z2 }1 g+ C9 X1 G

7 o# j& @6 ?$ E( }
图9

8 H% h; W  x$ A' K& q此文件下有两个这样的地方不同,这里是指自动对焦模式。
5 [/ I5 C( W( K# ~ 0 W) B! O: Y- Y1 ?% P6 C
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
) _$ J6 z+ i0 ~" A+ c; h5 N
4 h# ^" N! n+ B所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv- \( f! X+ N! |  e$ I. y& y
8 {- K+ c+ G# W! @  }" V6 l8 Z. K
(2)  在支持的sensor列表中增加目标sensor6 m" @# H/ Y6 p. z3 l
% [+ R2 P' i1 R  ^) X
\src\ sensorlist.cpp
* A' q( w. X- _3 J, ]6 ~
. u7 p1 m. a* ^- Z) t[cpp] view plaincopy! o2 S9 z- I, q) z3 b, T7 o# L& G
( G, B6 x: d1 g9 v$ m: d  T
6 h& T. X0 @8 t, C& y
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  8 n9 k! S2 Y) O' W% S5 Y! V9 v
9 E7 v% w' f7 R2 n
# y( ~/ X; z8 X$ [  Y1 h

3 g( H9 W$ |5 K4 ~5 a. N- e注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
2 A6 b  C% X7 x2 p
8 O" F0 e5 X1 L; ^7 e: N: f
) R% f2 b& M" c, c4.3  拍照图片尺寸设置
/ ]& v9 T6 u1 Q6 _- @
7 F! X! F0 S  j% ~8 fmediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h) w& x- [, N, F1 z+ K
3 j1 v" I) X) j6 I6 ^
[cpp] view plaincopy$ z9 H+ `/ Y! T  y  o

: k( a: S( g: O- S% \) L4 y5 }3 Y. [  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  
  •    )  
    4 P4 `( ]- [$ V" \% t7 L' {" P

% G; b% g$ Y' S% H! c6 j  F% }% c! H5 t; \3 y+ X% Y2 ]
4.4  Camera物理角度旋转  E8 l" g- R3 F) I, @7 u2 ?: Z" I
Cfg_setting_imgsensor.h: {# @8 ]; Z+ f5 l0 ~

8 D: v; N4 o4 p5 m" }8 t* m[cpp] view plaincopy
+ s  I6 j: t6 Q! P9 [
! i+ V" O8 H0 m  K6 |. Y6 J( Q' {

  n7 E4 v. g2 E8 a' c+ v. 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;  
  • }  7 J, v+ N' {: T, X* `& C
( P7 c& U+ l$ ?/ a

6 d- C/ V8 m$ C0 H, o9 C3 z
$ i% o( J1 d3 c4 r* i这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)& H, N  u& J+ N: c: z4 w7 ^
参考:http://blog.csdn.net/loongembedded/article/details/41679977
" i% \' v# M2 I/ l$ K2 J5 @ 3 ~( O+ A2 t. J& O8 V+ t, X

3 X, y3 ?# G) m) K3 l( f' T; E8 I看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。
2 R4 Q- @+ n' Mhttp://bbs.csdn.net/topics/390837150
. G$ G1 t: v$ z
* D+ {+ T/ x9 {% v7 C; L* i可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。
/ M' [3 R& _! m8 N9 @' e- I . Z2 x+ A; k' V1 G6 z5 E0 w& r" M
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h1 e* M0 R+ b; I! n# e7 n1 S3 t
" a$ @0 Z% [; g& O6 t# T: `1 a
[cpp] view plaincopy
* {) U3 A0 p# D; e9 j. E4 O+ R

/ P1 b$ v8 d7 w, X+ W6 v7 P: x4 i" N% v+ V1 V/ n( u; {4 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
  •     )
  •     */  
  •      // 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  
  • )    k7 q( B  U* A4 [% b% ^5 _; ^& r/ D

: }% o2 F4 I0 i2 r9 o
7 x% r) K9 t: }  g$ A9 `/ {4 z7 S( L& G  {+ h# x" f! d
5 j: s; w$ A6 x' t

3 c( }/ d. X( g% c  K  d我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”2 R( C9 T. ]: K
7 ?- l: S; u, {9 x& k
( F6 v& f- y/ N+ J
$ n- i4 g# X* }8 m- [5 s( d
参考链接:5 @9 j) `* [$ K' @
MTKAndroid Driver:camera' Z) d, ~7 _) V+ `& B" k' L
http://blog.csdn.net/cbk861110/article/details/174372834 I, o; F- f( [7 W& e2 n0 T! M
. h$ i, v7 g8 K5 B( J

8 i" v7 I3 K- K+ M2 T+ W' lMTK cameraimage sensor driver" X5 T) }$ H) Z7 v
http://blog.csdn.net/sunweizhong1024/article/details/8497790
7 w  p& m5 N9 n6 {! p 7 z5 w, x" j- c# D
MTK平台的ISP架构问题5 O1 t/ W/ v7 y! j
http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
1 l% B- d. ~% h( s
" c) k* w! {4 P( BOV5640 YUV的自动对焦功能为何没有开启4 k3 C  w1 o# ?, t; L
http://www.16rd.com/thread-10480-1-1.html
, v+ ?6 u$ c+ [3 M+ Z) \5 A$ V " W& P4 ]0 ]( s  x; `
MTK Android Driver知识大全8 \  }2 B3 W/ Q& f
http://blog.csdn.net/cbk861110/article/details/40931835
2 m9 `' r" W4 U# x' u" A
) F! L  W0 n6 z$ P+ Mmtk camera移植步骤
& Y' M+ z' `4 f& }; s& ghttp://blog.csdn.net/vasvas/article/details/39250473* f0 M! x1 |  ~* r0 H( u
+ m" J+ Q: V5 l. {- D
关于 前置摄像头安装0度或者180度9 m7 T8 i6 o  K4 ^
http://blog.csdn.net/kkkvvv123/article/details/8809823+ V5 I7 v4 R5 G  W% U; B6 f
; U+ O0 }  N* ~  A5 m" i+ U
Camera 涉及的文件70
( {* Y  q$ V5 W. l3 Nhttp://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html
7 ^& Q4 f8 H: b. u' ~6 C
( h  C# t7 S+ z8 dOV5640全景模式预览倒180度,拍照正常的问题% y8 B% C% ~5 H6 h4 L' v7 W
http://blog.csdn.net/guoguo295/article/details/21245815
/ Y/ \+ x% N9 i5 t

2 ~! s0 J  y4 {% _! z8 y8 p: t
4 Q% m. {7 g$ g& [/ m( Z  G
  •   {2 W2 i$ `  R5 b
    ' [, ^0 `3 _4 O! w
* ?: M3 Q, |9 w: ^; _

6 M1 A0 \% u: d
匿名  发表于 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.