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

MTK6577+Android之Camera驱动

[复制链接]
发表于 2015-6-29 14:06:39 | 显示全部楼层 |阅读模式
MTK6577+Android之Camera驱动( f+ V1 }$ D+ x- }6 H7 k# w

& P  G; y% M4 W- U" n
: `+ t' @) r, |6 v2 F+ Y
MTK6577+Android之Camera驱动

/ j( C0 J3 I/ I2 K* N

9 G5 T$ K! z6 m7 w) b7 Z" x0 C
2 u6 F. x" P% _! {* `1 r' l
图1
) L3 I1 F1 b( k. _4 o, P/ u' ~' o$ I
1.     Camera拍照相关概念' c! R1 B1 `3 \5 p

# Z/ A; Y/ ?1 R# W1.1  ISP) _+ w( R5 b3 X5 |, s
$ w1 G+ P" M$ s8 {, u: K, a$ d
isp——(Image Signal Processor)——影视处理; p9 E( o9 A$ s9 V
( _; T1 p- x/ U/ R! U5 {! z
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上4 T6 I6 H0 [9 O& o. w. k

! O4 W! l( d/ C9 g& W1.2  720p8 Y5 @' L( V4 K% U& v
720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。是数字电影成像技术和计算机技术的融合。8 F3 c8 m" E% B; l/ p

0 B- z. o% q0 q: t% p分辨率为1280×720p/60Hz,行频为45kHz
0 u4 k4 ~- c, l) t" b) v0 y# ~" O' P 3 t; L1 W/ A7 W4 W+ q5 q4 x5 ?5 X

8 x  _- W& G9 v# L9 j# \4 d0 e2.     MTK6577Camera控制器部分* v$ `' }) }' x+ `; B

. h( m% U8 c# ]2 K8 H/ q. l* W2.1  camera控制器概述8 J3 h% d7 F) W% @% [. e& \
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)这些特征,用于图像处理。
; y+ ?1 N6 p0 g) R+ q
* v4 }  K* D3 `2.2  camera特征' E9 }4 X  p" s
" M# }3 W8 v+ \( H& k  P9 i( N; ]/ x
MT6577内部集成的ISP,包含了一个功能强大的图像信号处理器,用于连接各种各样的图像传感器模组,这个处理器由时序产生单元(timing generated unit: TG)、镜头/传感器补偿(lens/sensor compensation)单元和图像处理单元。
5 \/ a- m" H/ T, Z0 e
( y7 S) M3 w6 ?支持的特征如下:/ i" o, c+ w& ^& y0 x& R4 X
(1)   抓图分辨率达8M像素(image capture resolution)。7 A0 \, {. b( h0 u  s/ B
(2)   录像分辨率达720p(video recording resolution)。! h$ I# S3 }- y0 ?9 `! w
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。
$ _$ [# V, T1 S3 `7 A4 w9 j(4)   曝光抓图率8M@7(burst capture rate)。
9 C! o- R, t- U(5)   图像处理) p8 C" i, q7 E0 Q# \% S
低像素补偿(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)。8 _. O! \1 S1 h4 J$ g- ?1 i* F$ a
: @* H7 i6 \7 a: y8 ~/ D8 ~
(6)   3A统计和校正(statistics and correction)
4 |% V( ^$ Z+ i: K% A(7)   闪烁检测(flicker detection)。3 ?: u0 m$ d% a) o& ^" \
( [7 |- t1 e+ f1 p' p
2.3  camera框图
4 C6 I8 r$ x) e( h

: n+ ]+ Y* d: Z- M, E0 ~. S5 G

+ E& I9 D$ ~2 }2 v
图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)单元。
: n1 l1 D0 }+ z1 l
; ?; ^4 s6 g, H" ?" C) Q1 @" u在Bayer原始数据输入模式,镜头/传感器补偿(lens/sensor compensation)单元产生补偿的原始数据给色彩处理单元(color process unit);在YUV422/RGB565 输入模式,这步被忽略。1 Q$ M4 b) E+ x- k' D, @
" b3 x$ N: F0 G+ l+ S: d8 |
色彩处理单元接受来之镜头/传感器补偿(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读取出来。" b5 F' u) U9 W7 L$ _
9 `. B; r$ K5 D8 R: L
下面给出一些性能参数:
- K, e3 g" F9 q8 {
$ G* i6 M, q$ ~
  Z+ K5 W. z  c
图3
3 X+ C" ~# u5 n% L! F( l2 o/ r
3.     原理图设计6 `" t, ?; G/ L( z$ j
+ p# k$ s: i3 L) V
MT6577支持两路camera接口,一路是MIPI接口,一路是并行接口,这里我们采用的是并行接口,下面给出MT6577 CAM并行接口定义:
4 S. t1 ~. w8 C7 E, o
' A; t# z! ?- w7 ]" l1 ^
% c' B0 l3 O' r: b2 u
图4
Camera sensor连接座如下:  J+ O( e: R* n9 x1 Y
: k1 m) y0 k  s4 A9 ?6 a
. Y1 [2 J3 i9 l) w6 C7 k0 Y) A
图5

  p7 O, _3 H0 {8 [5 c, J: l(1)  OV5640输出的数据格式
& ]& l9 ]. _/ C6 v4 {/ p《Y1MT6577 design notice V0.1.pdf》文档给出这样的说明:
) a( Q  c7 j7 k5 lSensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]( Y' k" i7 Q* i. p/ x
Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]' E% x: ]& E4 s, I1 D0 R
而我们采用摄像头模组的驱动IC为OV5640(500万像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,这是由OV5640寄存器0x4745决定的。原则就是:首先看硬件上采用的是8根数据线还是10根数据线,然后初始化参数-也就是寄存器设定也可以设定是8位或10位。如下图:
% p8 l9 ^8 R4 y  h9 y& p  F

& x9 o3 n/ s: W# H3 Y) d0 U

) z8 K6 o9 ]' M  U! w/ E
图6

* s* V" G+ {8 J/ u
. a. G9 m. _# S0 W) o8 h1 q(2)  OV5640IIC地址, j( Z, b  V) X3 p4 ?( ]' S
3 H) F: _' b; F5 @
IIC 8bit写地址为0x78,读地址为0x79,查询Sensor规格书可以看到:
7 y& D4 `$ X" X. l+ q; I) r

# Y7 a! Q4 L6 r1 X9 d1 R0 B

. u% [8 D. P3 \+ M7 \3 F" h
图7
IIC 8bit地址最后一位为0时是写地址,为1时是读地址。这属于IIC通讯规则0 v. h+ x0 m# ]& J: n, I- o
+ O' M: l7 L+ H( v- q/ d) o
( M; z5 O6 |! f# X
4.     驱动实现+ F6 f- p  W, I& a4 ~' I
4 U. y* \) ]2 I+ G/ d* F

( K$ L: k3 E0 O+ m4.1  相关代码
6 a% n  R9 E3 D& E% f8 l. l+ G7 t- C. ^(1)  CameraSensor驱动相关文件
+ V+ ?1 y2 g& d# d4 |) h0 Z\mediatek\custom\common\kernel\imgsensor\ov5642_yuv+ J4 e% t4 `9 g! {9 T

6 w5 j2 i, Q- A(2)  SensorID和一些枚举类型的定义
% z( W8 u# x4 a9 M7 X" x( S\mediatek\custom\common\kernel\imgsensor\inc
; `6 S* f8 [, y) okd_imgsensor.h---------SensorID
) }) C& v  j! e/ C+ r8 q; x. [kd_imgsensor_define.h--------------一些枚举类型的定义
* ]* \9 S6 V/ n* }$ {' ?/ f# P . K8 Y6 ~1 @/ ~; {& T* @
(3)  Sensor供电& [! n% {' r) h- X
\mediatek\custom\common\kernel\camera\camera: u8 w/ z% A$ q
kd_camera_hw.c和kd_camera_hw.h
9 R- a9 K# ]" E4 M% C% D0 G% n - u% j/ T7 O# v
(4)  KernelSpace的SensorList,imgsensor模块注册0 q% h0 q, t4 y/ M
\mediatek\custom\common\kernel\imgsensor\src
- O; P0 X! n7 `- [  z5 lkd_sensorlist.c和kd_sensorlist.h-----------camera模块加载0 {5 N, g9 G6 g4 i0 n: R& b2 \
9 W: R2 Y% j& f3 \8 g
(5)  UserSpace的SensorList,向用户空间提供支持的SensorList3 h6 X7 Q; E, y& M& Q
\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
! I8 W3 |" h! y! @- Q& b4 k提供给用户空间的SensorList# U4 x0 V+ m, L
% d3 e4 N' z6 Q' X3 s) z& ^
3 _! v7 V! t; Z9 e8 n3 {/ U9 u
(6)  Sensor效果调整的接口# f0 X2 J, U2 k  B
\mediatek\custom\common\hal\imgsensor\ov5642_yuv& w+ K2 L: Y  i% C$ d2 w

" i+ S# m' u8 l9 O6 K" { # B2 ]/ e) `( z) _+ g
4.2  针对OV5640的修改
$ r" `( [1 W: ^
  a: s  ~. e3 c* M4.2.1       mediatek\config\hsimobile77_ics2\ProjectConfig.mk
. N) @) h# I+ U+ {3 d; B 9 M/ d* C5 k1 t6 ?
CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv
( C2 ~4 ]6 G4 G7 F; V. nmt9p017_raw表示后置摄像头(也就是主摄像头),mt9p017是摄像头sensor驱动IC,raw是sensor一种输出的数据格式,是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地没有将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
/ \: t; q+ S* b6 f3 l1 j 6 ~# ?+ m  L3 H( r( A7 Z0 R2 F" L
gc0329_yuv是前置摄像头,yuvsensor一种输出的数据格式,支持YUV/RGB格式的模组,一般会带有ISP(image single processor),经过A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
2 C* g  S6 ]- j  p( X. Z. a
1 t3 l! `! p; Y$ A% u我们采用的OV5640就带有ISP,输出YUV格式2 {/ w) [/ E' i& z
+ Z. H( x7 e+ n
(1)  把mt9p017_raw 改为ov5640_yuv,去掉gc0329_yuv因为我们的产品没有后置摄像头
! [1 e0 ~" d$ \9 W(2)  去掉类似CUSTOM_KERNEL_LENS后面的dummy_lens因为没有后置摄像头$ y1 ^% s7 s, T5 H9 ]' m1 t

2 I$ T3 I6 a% v( y. g  C3 j修改之后的HAL层的配置:
" ?6 D, g5 o6 d. E9 y# A8 T! v- E' B
[html] view plaincopy
, a( o8 J/ f8 C7 K; |9 D% d% ^

( n8 n) B( i6 ?6 S* a  l
8 U& u2 C$ J! _8 {- z
  • 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  
    ! e) M% v( l' A$ K% |! K, s" s6 C/ {
$ r2 I5 @* P3 T) N1 I
& `6 `, v5 R9 |

+ \( D  P: ?! S* y- \* P" [' `修改之后的kernel层的配置:
- ~- k' p/ s' C9 g
/ \0 w3 I0 h. I7 J[html] view plaincopy$ R' W# O& k  O- K6 e3 y, `6 z
. D- J) J$ l8 Z( K( j5 M7 O1 w1 C3 ^

3 u- Q5 x' @- s! p' i$ W
  • 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  
    ( J7 N$ u3 ^. P$ ~1 I% `8 _
0 f( g" Y8 m& G8 a! r

) P  u, N2 f. {, j
" |* F% s1 x5 O8 g' e& L$ @9 z$ ~8 p0 k
虽然我们没有后置摄像头,但不能去掉dummy_lens,我尝试过去掉之后用./mk r dr编译会提示下面的错误:
9 w$ D& n4 A  x( i  K( {
# w/ f7 O3 d8 ]3 q& _9 j[plain] view plaincopy; k6 O' }6 I  J: ]3 ~- R6 \+ c. s
: p  Y- m2 p; ~1 E6 k4 H3 O, `' T
! n1 \0 ~% T' o, ~
  • 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  ) s( W( G9 A& z" I. \- ^

: d3 ~9 x' A, @% D0 \
6 C2 s- b! o% e& Q# f3 J
/ [& S$ ], U  j8 E3 q: I
$ e9 i) f! C1 R! G* H: L9 Z4.2.2       mediatek\custom\common\kernel\imgsensor----------kernel层
* `+ Q; ]$ M4 {
0 Y$ a0 N# v- F5 T(1)  创建ov5640_yuv并建立需要的文件, v+ x# P3 O! }7 V9 o5 p6 W; s

0 ~( p# I; l1 A: u9 G8 E创建文件夹ov5640_yuv,把sensor IC厂家提供的ov5640yuv_Sensor.c放到此目录下。另外拷贝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷贝过来改为ov5640yuv_Sensor.h等。# A3 a6 J9 I1 K4 S$ {. q9 _

& V" b8 c+ _( f# 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是没有这几个宏定义,我暂时定义如下:
/ q* u$ g* t9 o) s, a/ u7 r
! L- I4 e7 [: ]3 A0 |  L1 A[cpp] view plaincopy
% P8 ^3 s3 p# T$ Z' [2 r

5 j: x/ Q7 [/ ]
3 [8 T& i; U! `, x, x
  • //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  * z* @, }/ g& l; C: l
8 z9 s- r3 u$ q. X6 d+ D
0 v5 N3 Y9 c* i# Y8 A, G

& f& }4 Q) v8 `3 \4 }# a9 N这是参考ov5642的相关定义来定义的。9 m; p2 N+ F8 B7 |4 m

3 a" m+ _5 m1 p(2)  在支持的sensor列表中增加目标sensor
: Q/ k4 e9 }  i7 f- E7 t. p; S ) C) l1 J3 b8 Y2 @; R7 A9 c
mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h
3 G- Q2 y( \1 b- _在数组增加OV5640的内容,如下:
7 A0 Y# l1 l$ r; W/ w& U6 a
# u1 m. q& c. ~+ k[cpp] view plaincopy" q, g: y0 p% {% k1 p0 `
7 r' p7 m; h+ r9 q

6 [( A, ?. X% x+ M2 U
  • 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  
  • …………….  
  • }  
    / \' v! _2 |  T: O5 `

  e& K. I0 O+ p( o, }
8 @7 l/ Z7 O0 M4 R9 F! j
! G1 W/ ^' c0 t0 O" h/ u也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);
& A/ ?" a5 p9 _. G* xmediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h, e( Z! O  Z" p; B3 c

8 d6 W. n5 H7 V6 A7 r8 y4 N(3)  增加sensor ID和字符串的定义$ h1 y% T, ]  M' T7 W

2 g8 h# @, u0 ?) F4 E- f; E[cpp] view plaincopy* i# R" k8 S: D& J
7 h( h1 q. z3 H% Y8 }. w1 P
+ v  y* T- ]2 G( N* I" X' n
  • #defineOV5640_SENSOR_ID            0x5640  
  • #defineSENSOR_DRVNAME_OV5640_YUV  "ov5640yuv"  
    5 o8 D0 k+ b* u0 r' h

" d  h7 J7 M  `* O4 v$ P; K: Z1 |% O/ e; ]" n# L/ O- |

' j) O* D" S6 K$ d2 n& ]4.2.3       mediatek\custom\common\hal\imgsensor---------------HAL层9 e& \. y0 L! Y! Y: K& |; P

+ @1 ?4 i' H9 N; P' f(1)  创建ov5640_yuv文件夹' e. g, O3 \# g  ^
但这些文件夹下该有哪些文件,有需要哪些内容了,首先我对比了0 q0 X& ]$ m: a4 K' z, x* ]
ov3640_yuv和ov5642_yuv文件夹,只有cfg_ftbl_ov5642_yuv.h有差别:0 L$ m! s/ w% M8 N. H% P* C, D
图8

7 m" b& L/ G; Z4 E! o这里主要是不同驱动IC支持的分辨率不同,以及设置默认的分辨率。) U  h6 d* K' j0 a. t/ s

1 m, o% D  O  S+ j
图9
( m, R+ e# O- c
此文件下有两个这样的地方不同,这里是指自动对焦模式。9 R2 [" w% D" b( B: b$ t/ D
9 ^$ R3 N" c6 D' W& ?% z3 ?% K
因为我们的OV5640和OV5642非常接近,所以就直接把OV5642的目录复制过来修改为OV5640即可。% P1 Q6 Z; ~& [4 G$ u/ g

4 ^6 Z) W2 L, c/ o" M所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷贝到imgsensor目录下,改为ov5640_yuv8 G5 }3 b( N+ v, ~

' g& f/ V9 F  e6 x( i, L! A. r(2)  在支持的sensor列表中增加目标sensor
  i, W2 [3 P# x1 c4 I $ U2 @+ X# O* ~# K( H. |) I5 H8 v
\src\ sensorlist.cpp
) x6 C  f6 @  h% ^/ Q" n$ N
1 d7 h8 t4 v) g, e, E[cpp] view plaincopy: O  B) P/ D2 ~" c4 X/ l: O0 L
# Y: q# b: t3 E/ c: b4 u4 J4 N

: ~  W5 e0 a6 E
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[] =  
  • {  
  • ………..  
  • #ifdefined(OV5640_YUV)  
  •     YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV, NULL),  
  • #endif  
  • …………  
  • }  
    1 X) ~' i- F- C5 f; Z5 w

& f7 I# |) @3 ^/ S
+ f  ^" g' A5 u; M
$ u$ X! U7 F) b+ M3 B2 Q1 ~7 Q注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驱动的时候要注意,Sensor 添加的位置要一样。否则驱动会跑乱,轻则 ISP 参数不对,重则 Sensor 无法启动。9 y! r$ i8 Z5 f! V- c- R! z6 @" d
% h9 B; |, T8 c/ |( C

0 Y" N$ ], Y, }  ~$ U2 m( H: q4.3  拍照图片尺寸设置4 h; d1 Q7 X7 f$ U
! s/ @- |( X+ D" B
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h) n& A/ V: C4 @7 Z
9 f, n5 d8 a" @. _: e' ?
[cpp] view plaincopy
6 S+ m  D: N6 v

! [' B; Y1 Y7 J! S" N+ _* D# W0 w' p
7 E- h( X6 g$ m! s
  • // 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  
  •    )  
    # t  [$ j" q8 [4 W
5 S# A% q, P, Q% L7 S( T4 m
( P; U& z- [% d& P/ C
4.4  Camera物理角度旋转5 }1 g$ ]" j, U* T  B
Cfg_setting_imgsensor.h8 r- }+ E/ \" A8 ]$ |
; ?3 y! F1 J# z
[cpp] view plaincopy& ]( r9 ^) n4 u8 W5 n) P" u
  v" @3 Y9 O( H5 P$ n
6 D8 u% q/ B4 t8 e" T5 M
  • /*******************************************************************************
  • * 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;  
  • }  
    2 r0 e; m- n$ L- h
& q: s1 e" V2 k

& W* c# Z: z$ M, A: V5 S8 K) Q1 M/ C/ K/ G2 Q( d( ?& _
这几种都试过了,但都不行,预览和实际的都是成某种镜像关系。这是平台是提供旋转的功能。这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)8 T' ]8 @; N! A0 X6 M3 W
参考:http://blog.csdn.net/loongembedded/article/details/41679977
) B+ c6 D2 j1 l6 P1 A5 A
6 f: w1 p, f# E* y- V% n

3 ~4 }% j; k  ?6 [6 c! M; p0 |看了OV5640的数据手册,寄存器0x3820和0x3821是用于控制图像发射(mirror)和翻转(flip)的,在u4Degree_0=270情况下,OV5640YUVPreview()调用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),预览和拍照后的预览都是OK,但拍好的照片在电脑上打开的时候发现是顺时针翻转了90度。3 [6 c8 }4 H! d/ z& l
http://bbs.csdn.net/topics/390837150% R! r; n* q1 P) c
7 }% ?# H9 E) Q+ ]2 r+ |
可是我在OV5640YUV_Sensor_Init()调用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)却问题依旧,很奇怪。- j  u' D9 s4 L. d( g( l
" q) o$ I! T+ J+ h  b
mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h
" j' ?3 B% D- c% t; O; M
% z- }5 y0 ]& g[cpp] view plaincopy
5 @" X  G3 Z3 L1 q  ?

2 _7 [5 f0 M/ O2 K  @& m
* z# e% f4 _& v
  • /*
  •     // 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  
  • )  
    $ I6 X, N* e  E9 d$ b

7 O0 m- c& g1 J/ K8 g0 t
5 j. l4 j6 h$ A4 H+ m5 n* E# y; R/ D5 U: t" q/ K9 J! P  T
, I$ `: o0 e! q
8 b7 `$ L1 `* y% Q  q9 E' m) L8 k
我试过做上面的修改,但打开摄像头的时候,提示”Unfortunately, Camera has stopped”
, d3 `  X6 e  ?- U- p% N) {0 v
% ~. h5 m$ ]& o0 K$ B/ s" n ' w2 R5 r* o+ H# Y/ D% J
" c# {5 R6 ^' _1 B
参考链接:6 `/ x" `# b& i) ]! x% T% Z
MTKAndroid Driver:camera. n( ]: M* T3 k) \' P
http://blog.csdn.net/cbk861110/article/details/17437283
0 k% H* L0 h; _* l5 U# Q7 l
7 |! M8 u9 B$ C
# ^  E6 _4 N% e% ?1 [8 rMTK cameraimage sensor driver
0 o$ H' }" U( j: Z9 ohttp://blog.csdn.net/sunweizhong1024/article/details/8497790
" h5 }2 x, K- f & T' b6 X, l7 a0 p( T4 k, f
MTK平台的ISP架构问题
: e0 ]- E0 c2 Hhttp://bbs.52rd.com/forum.php?mod=viewthread&tid=272727
' g, D: I1 ~: u, B, K" ?7 a
2 @0 A0 l1 b1 z& S5 {+ _OV5640 YUV的自动对焦功能为何没有开启+ F- b# |1 @5 s
http://www.16rd.com/thread-10480-1-1.html; B& L# w3 \: H

, \3 e- v" _# w/ b! EMTK Android Driver知识大全
, U1 t' W% i3 j/ J0 E- _" phttp://blog.csdn.net/cbk861110/article/details/40931835
$ N, e- L) P. y9 x0 \ $ L' o  Q% V( `6 i! B2 n
mtk camera移植步骤
3 v' ^$ V5 \7 o; f6 U7 f8 C, Zhttp://blog.csdn.net/vasvas/article/details/39250473
4 [+ ^- N1 \. V* G6 ] & f2 w( _" O- g* P8 M8 E- }
关于 前置摄像头安装0度或者180度  x( \/ o9 O* P/ ^2 ]+ s8 o4 q
http://blog.csdn.net/kkkvvv123/article/details/88098230 Y9 f6 ]5 {& m1 \: x4 U5 a

  e4 e8 O% I6 H+ S5 m) |Camera 涉及的文件70$ ^$ [- |" w5 b# Y6 g4 q0 r/ W
http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html% w: c' f3 n$ i& c
4 ]& H) H4 t& Z3 P9 e
OV5640全景模式预览倒180度,拍照正常的问题  m$ b! J$ \! i7 a- t2 C0 [
http://blog.csdn.net/guoguo295/article/details/212458155 P' Q  O; l: I+ ]* O

2 W! A: K4 r" K7 X  V; z$ d* r8 L1 Z- z

  • 3 P* W- c# B) `% t- _

    ( x1 M; L) B7 I
/ D/ Z. n. ]; y2 b8 |0 B
" i6 v, I0 g) _% f: j+ X8 m  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|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

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