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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动
8 N+ {5 }. U7 E) z7 \  v

4 ?" w2 _2 j2 [7 z/ U% l6 G4 E

$ C" k+ P6 M: [4 S
MTK6577+Android之Camera驱动
, X  E! q& @2 M9 Z" s+ c' e

$ }  H) B+ O8 O! h
& [& i9 K' K, G1 g1 h: ^& P' d
图1
7 K+ T( ^% H3 C. h& A
1.     Camera拍照相关概念# U6 x5 h0 U1 U- a

6 I- P& M3 ~: _$ ]: A1.1  ISP- r, U0 H8 |- g7 u) d* \

1 w1 O* V; G$ H% V4 U3 xisp——(Image Signal Processor)——影视处理6 G' x9 M% g. F5 T6 q: c: A
; L# N& J9 @( b; j& A
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上
/ P  @/ ]% `" G/ @2 L) r. E4 E 5 |0 F) }, ^& \
1.2  720p  A) {+ n) Z% ]: e! T& a
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。  e6 g# f7 t2 d# }' |

: P6 S# F* F# e分辨率为1280×720p/60Hz,行频为45kHz% W6 J; j* ]1 F$ T4 I! g7 t

0 }  Z; M, o4 u  y0 Z# E3 x" M , q9 c' {$ D- }
2.     MTK6577Camera控制器部分0 W: c1 P3 l2 z' L3 c8 D0 U+ E1 {

  z0 J2 F+ I6 a& d. b) E2.1  camera控制器概述
4 [1 V8 a. [  h% aMT6577 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)这些特征,用于图像处理。1 G: @1 Y0 G6 t

' R$ B& h* e% }: D% H% J1 O2.2  camera特征
! @% V- F+ ?# K" _$ ~* r 5 \* M: x& N! N# e
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。' ^- O; q# r8 Z. |
: w, b" j( M9 ?7 r( f! m* A
支持的特征如下:3 v2 ]' P2 [& [% P9 j+ s6 X
(1)   抓图分辨率达8M像素(image capture resolution)。% u% F; Y8 @4 B* d6 C5 q
(2)   录像分辨率达720p(video recording resolution)。
6 o; R7 K  O- C( [! r1 ~. j(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。. N0 D( J+ z! K% V. j( J  ^
(4)   曝光抓图率8M@7(burst capture rate)。$ W% |% a, H$ c) S, o, B6 c; M% |
(5)   图像处理. T, t6 P7 b* m: U! n. X$ {( O. `
低像素补偿(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)。
9 g1 j) M- p/ B8 s8 k! ?4 a4 } 4 I! U7 ]. _, j9 n1 H
(6)   3A统计和校正(statistics and correction)
! N9 b. k/ k. I4 t3 {- i# ](7)   闪烁检测(flicker detection)。
- x: [! k! h0 D& ~1 p+ y
" Y  D0 n1 m/ \2.3  camera框图4 v5 r7 f; U. I! z: p
" ~6 L" {7 \; Q! c0 y& W' V

6 Q, S7 O6 Z0 U4 d9 T7 n* w) N
图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)单元。
: `' ?5 n# |: a& N% J 2 F7 L+ U6 T# v1 q0 z
在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。: ^; b0 V" Q( A/ c) |8 @: ~
! f' Y! [  b0 W# V/ {. 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读取出来。( ~) g; b: U4 r: n; s
! I3 g# m) [. Y8 R& c# c2 p
下面给出一些性能参数:
2 R# j6 Z" x; n/ J' _
; V$ S- d0 F( Q8 ~. y7 \" Q/ |* J

2 l; v/ ?& f% N8 K# ?  q+ |
图3
9 G' `* |  G0 h( Y" w
3.     原理图设计
0 O1 w3 O( K* v- C0 E% w: B , n* \- `8 q! c- m0 q1 v0 a
MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:* B9 M' M. ?% W. E( ~: p
8 d; T" L1 N) ^% k

: e* k' h* b; L7 i4 u4 ^5 k
图4
Camera sensor连接座如下:8 D" P7 S7 ]  L% u6 c; u( B  f
1 ^5 T$ ~3 {. {5 F. l) z% r# G
! r/ @3 @6 L' N  k9 g( B% M
图5
, G- O4 j4 v& e0 q8 _
(1)  OV5640输出的数据格式
+ e1 g; u7 k4 d6 b+ f! b5 \0 ?《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:; x& e  ^2 D9 C/ `! X/ `
Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]
; a( b5 f/ V2 DSensor outputformat is RAM10,connect sensor output to CMDAT[0:9]
3 w( j  r4 Z8 L$ ]. J而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:1 c* R# N9 q8 ]) t
0 L/ R7 B" y5 A, B$ j0 B

1 }- c; G& T0 H  J0 F6 T2 }* G
图6
! k8 D2 m8 c# x: r, H3 q4 F

0 a0 g9 G( J# o- z2 h0 A" L(2)  OV5640IIC地址
0 {- x3 p- b% U! B* D/ o
+ [. y% I5 Q* G3 VIIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
: F1 @4 h' \" Y# I+ t/ G& V% e8 ~
1 h7 n, n; t" G+ E

# E8 ~( U0 U6 \+ d' K3 `
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则
+ T; c. I2 \8 {' |9 @
2 \- f( |" b2 g8 B1 i1 U0 m/ u

" v% C  p) V. Q/ A4.     驱动实现
% g: r1 f! H/ u3 p( T% H( M3 R 9 t6 z& {& w7 q" E
" }5 }1 {5 ~: V3 H! u" B
4.1  相关代码. k# m* x; ?+ b( |
(1)  CameraSensor驱动相关文件; [  v3 q  X" q; o- k$ n
\mediatek\custom\common\kernel\imgsensor\ov5642_yuv) }( t/ d7 W. V% i& {

4 P& i( ?/ }, F) k3 @$ p& `! d(2)  SensorID和一些枚举类型的定义0 D3 n& B2 P2 p: m* D5 G
\mediatek\custom\common\kernel\imgsensor\inc% l$ d" F8 m# x! S' I- a4 `
kd_imgsensor.h---------SensorID
  P8 m3 y. r0 ]( \kd_imgsensor_define.h--------------一些枚举类型的定义
7 h" {$ d2 }/ b. C3 }
! Q/ C: G' O) v- w+ |# b$ c(3)  Sensor供电/ X3 @" G3 B- _! [* K
\mediatek\custom\common\kernel\camera\camera
* @% \! }" W" H& Tkd_camera_hw.c和kd_camera_hw.h
0 n# w' E' |# u, x/ E1 S) z 0 _  z0 F, i$ i/ j6 y
(4)  KernelSpace的SensorList,imgsensor模块注册' k, C+ T8 @. D. A& _
\mediatek\custom\common\kernel\imgsensor\src: V8 F4 t5 i6 F- {6 ?- [' B
kd_sensorlist.c和kd_sensorlist.h-----------camera模块加载. e  H' N& n. W" K) D

$ m, C: i; `. R(5)  UserSpace的SensorList,向用户空间提供支持的SensorList
' ^$ |, V0 Q' p, Y( D\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
3 }9 T' h6 w+ u& H0 I提供给用户空间的SensorList
4 v+ U: {% t# ^0 O
) `# K2 o* m8 H% X1 [
# F% w  [. c: @% i2 A+ }(6)  Sensor效果调整的接口
1 I5 I6 B2 R6 z; n+ @  ~\mediatek\custom\common\hal\imgsensor\ov5642_yuv! J, s1 t4 U$ t# H

. A% Y3 t) g; e, }: I) Z" m
: P1 u1 K/ W1 W* T4.2  针对OV5640的修改" y6 M' w0 f" B2 M2 }

/ J, y3 L- E; H3 A* G3 M8 p4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk# x& Y$ o4 l3 x% x5 x2 d3 n3 h8 r
" N! ?) e1 ~3 V  \, R
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
6 n  u0 k) O% s: f- Hmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。( k7 d' g0 _  q# V& C, A  }! Y

1 n3 m- J* E, o0 Fgc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。! o+ w5 L1 a& o  B7 @5 ?! _* P) s
, D/ [+ T# @  z8 O
我们采用的OV5640就带有ISP,输出YUV格式
( f" w; J, q1 H( {
5 H1 p% `+ z; `% N4 d5 e8 b(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头6 u2 D" \" u' C, i$ J
(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头
3 i- l; G( V) ?! P# V. x
; a6 L+ X5 S9 O4 ?$ G0 r2 z! X修改之后的HAL层的配置:4 a8 d" {$ W# ]' c

/ t1 ~: ~# X( Q[html] view plaincopy
' O0 D3 T# C- {5 k
' ], g% Z$ H6 r3 z9 t6 b( ^) X6 k

/ n9 V* [& ?" y6 _, l3 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  $ x) l/ z- z& e5 R( y
, O4 k5 M0 J: s/ w" L
$ a: O3 F, ^& A  g" e
6 R1 c! x# i4 Z0 l' ?
修改之后的kernel层的配置:
% B& D4 P' k* r" g4 R9 W0 K/ F+ t0 j
, Y+ T9 g5 g  M$ X7 {- x8 c[html] view plaincopy6 ]8 r) p" S% E1 d7 g! A; E' p0 S

. a) |% _+ ^% x# l0 S- Z" J( f7 r. u3 S3 ~" A3 Q5 v, o  J& ^
  • 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  ( D4 n6 ?' V+ j& u5 M
/ v5 f& C6 H0 [9 c( D
  ^" `, W# M9 B

; Q$ L; u4 @9 p% R6 z% ^. V. }' i0 M( g  H
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:& _9 M& U- ?, W; b4 d& S
. ^$ D& `7 @" F' L# `
[plain] view plaincopy
& h0 a- X  e7 w. X! b+ M( x4 q+ u1 p
  E. t2 _. J$ D& S2 X) K8 Z5 B$ Q- |7 U

0 m5 x7 x2 D8 V
  • 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  , O7 b0 R" l4 r" ]5 t

% [8 z0 R& k1 K' z( v2 r* ^5 ]5 _( v7 n0 `. U1 y$ B& B
- W; u# x8 S) b  c  O/ c
+ m7 E* T  _! T. d8 t4 G* R
4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
  U4 [( k5 `3 {# c 7 A" N7 W2 l8 b5 H
(1)  创建ov5640_yuv并建立需要的文件
7 r3 I( P" v( U" R2 Y9 A/ L* n
6 X/ S" f& `+ `! g创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。* h& \' S9 u: \- \
( }3 W4 v, P8 M& i! Q* A
编译发现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是没有这几个宏定义,我暂时定义如下:' D3 K/ E6 n) b& Z

9 i5 o. j. f. O, b8 C$ n[cpp] view plaincopy) d3 S! w6 e) G$ |. J
0 G) P8 t. Q+ F( e: @! y

1 e5 F1 @3 u- G8 t/ u3 c
  • //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  4 d: U, u1 w2 s/ {  D

7 v% e8 ~4 {' l% S4 W( q# x# e5 V. I/ C

5 S! q" a, }: S% Q4 [这是参考ov5642的相关定义来定义的。# _9 B& l2 ]' W5 c6 P

0 H% S; ~. ?% G! R; K$ t- Z(2)  在支持的sensor列表中增加目标sensor
: @  m/ [- F' W0 l/ P; L / A1 _2 V& ]$ h6 Z- j' C3 l0 F
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h; F0 V3 q. I" Y- k/ W4 H" ?( X9 _
在数组增加OV5640的内容,如下:
% ?3 W: t% P/ C4 ~# f4 A+ I# H. l5 E$ i# n$ Z
[cpp] view plaincopy1 \8 s! w* D% a5 r; }% o" ^

$ K$ z, N# Y! n9 l2 ^: W
( x4 S2 s9 y! G; Y
  • 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  
  • …………….  
  • }  
    * P) ]$ C) b0 h2 Z3 ?+ _/ U

9 \$ m# ]( K  C' X/ L( t
/ u" v3 ~" d8 l# |% x# B2 U+ z; O" U. |8 Q
也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);6 X: j' q1 ^: `6 d% y
mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h7 Z; v& y, M. C1 ^9 Q6 r
; J) l! U8 ^; S: i% S2 H
(3)  增加sensor ID和字符串的定义
; L9 |, p/ i' {; h$ a8 i# @5 p! ]' I& a
[cpp] view plaincopy
* w3 n% k, E; X* f4 P

- j% b: I: t9 y( R; q' U. k
( Q' B4 o; Z) N7 C3 f0 V. s- P
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    $ ~/ a# X% B$ w. E& T

7 @) w& A1 S8 ~8 `7 k# D
# g8 H* Q2 K6 i) S" J+ F4 x& Q# a5 G: ~% w/ g2 t
4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层
7 _3 A% y# b4 n# z0 J" @
" W. O6 W/ _6 ^7 V; w9 F(1)  创建ov5640_yuv文件夹
" C. L4 Z3 B2 a, V1 t& y; ?0 z' |但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了) G! x2 @6 q) h$ A0 O( A
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:$ K* z. m# {3 Q
图8
3 y5 C7 L, N2 p" H$ ?- ^% P; u4 x
这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。- U! |# r3 D% n9 y8 q7 I7 _$ a
3 k/ }5 w3 N, `- u
图9
5 h( C0 l$ U! h1 N0 R5 G' }- L: o
此文件下有两个这样的地方不同,这里是指自动对焦模式。
6 ?* t, B, o; N/ R6 @" i% e  i8 J
: n) Y0 E2 i: N( z因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。
) ~. `* n; n2 j: r5 Q. l / b. z: ]4 R+ n1 O9 Y
所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv" M$ M. s  r, O6 Z
8 C  W8 O" y7 C6 q
(2)  在支持的sensor列表中增加目标sensor
) ]5 q+ p$ ?5 i. h 3 q  \( B' Y8 M& }& ~
\src\ sensorlist.cpp
7 x) K( s0 |" j% w9 }8 d& @9 w$ b. B# c  o* {  O. \
[cpp] view plaincopy! n* @5 t2 J: p+ V& T

9 z8 G* k. Q2 y( t# f# q4 G; r. x
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  , F) D' a* z7 m' a$ j  x9 N6 z
+ Q' u. f: T$ a$ |& o0 W. {

- R( \3 c  O3 U! U! P0 g! b
( P! ]$ l5 s0 C( J/ G) S注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。
& \' u4 z  S6 I8 N+ P1 K, u3 q
4 X) @1 v; a8 P; P: l
- K& j: X- Q) Y2 {* z1 f+ H4 N4.3  拍照图片尺寸设置
, B2 Z$ a- [+ I  O3 H5 C+ S # G: {# L3 G# [/ f" @3 \6 t1 d
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h  z" g- S' b% B
1 m4 p9 T& i" o$ h+ J6 X  q
[cpp] view plaincopy/ j# ~; C) k) v2 _: h. M# y

  ]% e6 f; G3 \8 Q  I$ J; N7 H4 n7 U: S, B& ]5 c5 z
  • // 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  
  •    )  
    & E$ D9 ?+ U5 P  G8 |
/ Z) d. p! P- M  O, z4 n

: r% }6 t9 c1 `8 }9 O4.4  Camera物理角度旋转! I( }5 I- |# E4 \+ |& B
Cfg_setting_imgsensor.h
3 y% f/ ]0 G) b+ D- e) C  H
  a) J% S! ~  q5 Z0 ?0 a[cpp] view plaincopy
' D, T& B  G$ W( w8 {  a& }
" e' N; Y& W& n3 ?! Y

3 ?3 l7 ], h9 B) R1 V+ V6 O) W3 p
  • /*******************************************************************************
  • * 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;  
  • }  
    * Y3 @; f" ?5 b( B  g0 r0 F

: _& u) u; @8 e3 N1 S; u) M; B
6 P5 d9 A7 A: X
$ n( [+ x/ C1 ^7 S3 s" S- T这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)) S% _9 Y# W8 J4 T5 Q
参考:http://blog.csdn.net/loongembedded/article/details/41679977
) k1 w5 |& S; W0 L: _3 U
' z( o! H% ?8 ]+ S2 J8 _
4 C0 c! [, Z5 ^7 r
看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。: A8 E! n" [5 }
http://bbs.csdn.net/topics/3908371503 m* }$ o! c4 z/ j

6 ^* }# d4 q3 H$ z% c可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。
! D" A1 l+ c! `5 i' P) E# X$ r. L" g- D & N% _" V1 Q# u( \# R9 \: a# A
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h0 a% N* f4 f  O

6 D( Y5 f9 V$ O0 h9 U1 A/ y! P[cpp] view plaincopy
2 V" G3 |# X& y: y
, D1 p- ~0 L; |+ T7 \& ]0 E; Q! f

/ \& A. ~8 X1 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
  •     )
  •     */  
  •      // 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  
  • )  
    9 `4 _4 i+ F$ W, |

# B; D, o+ C5 s! s7 p& |: K* H( p+ A2 r' y6 \1 {

3 j! J. w" b4 |6 S* s' ]: _3 F0 e
7 @3 {) L* d' d ) X4 g) x5 w: ?4 H
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
& }% Y: k% b% i* ~$ D
- l% a8 _) O" S1 W
8 o' t( Y6 Q5 C0 s9 m5 ~  I
: G( O0 F" c  k1 N0 c0 z" B参考链接:; u. r9 }5 i% M
MTKAndroid Driver:camera1 F8 f; H+ a4 N' k5 ^
http://blog.csdn.net/cbk861110/article/details/17437283
# s+ v3 }6 n7 j7 w% q& j: k
0 T( j6 n. O7 P+ q9 E$ P6 x
: }! d7 F: f: {9 ~6 @MTK cameraimage sensor driver
' G' M! \! H# l9 G5 J* c2 I4 mhttp://blog.csdn.net/sunweizhong1024/article/details/84977908 w" ]0 t, r; g. k( f7 j' U; u4 a

5 F& B1 a8 N$ v) O/ G0 c$ eMTK平台的ISP架构问题
, J3 _# y/ n3 Ahttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
, K" A, f8 R7 d. e) y # r1 {( r: P! I7 p3 R& K2 }6 Z8 ^( d8 T
OV5640 YUV的自动对焦功能为何没有开启
3 i) M! v1 N( o, Thttp://www.16rd.com/thread-10480-1-1.html5 r! J$ r9 G1 C$ F0 Y, M" u# s( \

, q: S( t( L9 z! X# [4 ]MTK Android Driver知识大全
8 C6 l! m& L. f( k: Vhttp://blog.csdn.net/cbk861110/article/details/40931835
' H/ X. O- x% \' E& R/ B# ]+ A
, b( e% I3 O  F* x+ Cmtk camera移植步骤
8 l9 _/ D1 m$ ohttp://blog.csdn.net/vasvas/article/details/39250473
# u! y* p% y; ]& D4 C' {
7 ~+ R/ l" d5 K6 M4 G% P: o& v6 e关于 前置摄像头安装0度或者180度% b! _/ v0 ?- Y' E4 e
http://blog.csdn.net/kkkvvv123/article/details/8809823- h2 j' ?( ]6 b. J
. S; k6 t4 i' S3 ]+ P9 m0 o
Camera 涉及的文件70; e8 e2 z0 O3 k9 D! K6 n
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html- n. e" G; T$ d6 ?3 T8 n

6 o, M7 U; \4 f% zOV5640全景模式预览倒180度,拍照正常的问题
* S4 S) l; Z' H; O6 G& o1 Hhttp://blog.csdn.net/guoguo295/article/details/212458155 E0 Y& m  A) `. @4 A5 `1 ^

' g: G7 D  u: ]. l% d. Q6 p% ?
) `/ C, j* X) z3 P
  • 2 a9 z+ W$ [. c- R$ }" u

    0 |! k# [+ W- a2 q7 l

  k: \# |% z& z% }6 J1 T( e6 k3 K! z* k- G1 T7 V
匿名  发表于 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.