日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

MTK6577+Android之Camera驱动

發布時間:2023/12/16 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MTK6577+Android之Camera驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MTK6577+Android之Camera驅動

《MTK安卓平臺的Camera效果在線調試》



1.?????Camera拍照相關概念

?

1.1? ISP

?

isp——(Image Signal Processor)——影視處理

?

無論數碼相機、攝像機或者攝像手機,其影像數據從前端感應后,皆須經過ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像處理(Pre-ISP)與后端影像處理(Post-ISP)四個階段后,影像數據才能最終呈現于終端設備上

?

1.2? 720p

720P是美國電影電視工程師協會(SMPTE)制定的高等級高清數字電視的格式標準,有效顯示格式為:1280×720.SMPTE(美國電影電視工程協會)將數字高清信號數字電視掃描線的不同分為1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。720P是一種在逐行掃描下達到1280×720的分辨率的顯示格式。是數字電影成像技術和計算機技術的融合。

?

分辨率為1280×720p/60Hz,行頻為45kHz

?

?

2.?????MTK6577Camera控制器部分

?

2.1? camera控制器概述

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)這些特征,用于圖像處理。

?

2.2? camera特征

?

MT6577內部集成的ISP,包含了一個功能強大的圖像信號處理器,用于連接各種各樣的圖像傳感器模組,這個處理器由時序產生單元(timing generated unit: TG)、鏡頭/傳感器補償(lens/sensor compensation)單元和圖像處理單元。

?

支持的特征如下:(1)?? 抓圖分辨率達8M像素(image capture resolution)。

? ? ? ? ? ? ? ? ? ? ?? ? ??(2)?? 錄像分辨率達720p(video recording resolution)。

? ? ? ? ? ??(3)?? 原始圖像數據轉儲幀率8M@15(raw dump frame rate)。

? ? ?(4)?? 曝光抓圖率8M@7(burst capture rate)。(5)?? 圖像處理

低像素補償(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)。

?

(6)?? 3A統計和校正(statistics and correction)

(7)?? 閃爍檢測(flicker detection)。

?

2.3? camera框圖


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)單元。

?

在Bayer原始數據輸入模式,鏡頭/傳感器補償(lens/sensor compensation)單元產生補償的原始數據給色彩處理單元(color process unit);在YUV422/RGB565 輸入模式,這步被忽略。

?

色彩處理單元接受來之鏡頭/傳感器補償(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讀取出來。

?

下面給出一些性能參數:


3.?????原理圖設計

?

MT6577支持兩路camera接口,一路是MIPI接口,一路是并行接口,這里我們采用的是并行接口,下面給出MT6577 CAM并行接口定義:


Camera sensor連接座如下:


(1)??OV5640輸出的數據格式

《Y1MT6577 design notice V0.1.pdf》文檔給出這樣的說明:

Sensor outputformat is RAM8/YUV/JPEG,connect sensor output to CMDAT[0:7] or CMDAT[2:9]

Sensor outputformat is RAM10,connect sensor output to CMDAT[0:9]

而我們采用攝像頭模組的驅動IC為OV5640(500萬像素: active array size: 2592 x 1944) Sensor :outputformats: 8-/10-bit RGB RAW output,這是由OV5640寄存器0x4745決定的。原則就是:首先看硬件上采用的是8根數據線還是10根數據線,然后初始化參數-也就是寄存器設定也可以設定是8位或10位。如下圖:


(2)??OV5640IIC地址

?

IIC 8bit寫地址為0x78,讀地址為0x79,查詢Sensor規格書可以看到


(2)??OV5640IIC地址

?

IIC 8bit寫地址為0x78,讀地址為0x79,查詢Sensor規格書可以看到


圖7

IIC 8bit地址最后一位為0時是寫地址,為1時是讀地址。這屬于IIC通訊規則

?

?

?

4.?????驅動實現

?

?

4.1? 相關代碼

(1)??CameraSensor驅動相關文件

\mediatek\custom\common\kernel\imgsensor\ov5642_yuv

?

(2)??SensorID和一些枚舉類型的定義

\mediatek\custom\common\kernel\imgsensor\inc

kd_imgsensor.h---------SensorID

kd_imgsensor_define.h--------------一些枚舉類型的定義

?

(3)??Sensor供電

\mediatek\custom\common\kernel\camera\camera

kd_camera_hw.c和kd_camera_hw.h

?

(4)??KernelSpace的SensorList,imgsensor模塊注冊

\mediatek\custom\common\kernel\imgsensor\src

kd_sensorlist.c和kd_sensorlist.h-----------camera模塊加載

?

(5)??UserSpace的SensorList,向用戶空間提供支持的SensorList

\mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp

提供給用戶空間的SensorList

?

?

(6)??Sensor效果調整的接口

\mediatek\custom\common\hal\imgsensor\ov5642_yuv

?

?

4.2? 針對OV5640的修改

?

4.2.1???????mediatek\config\hsimobile77_ics2\ProjectConfig.mk

?

CUSTOM_KERNEL_IMGSENSOR=mt9p017_rawgc0329_yuv

mt9p017_raw表示后置攝像頭(也就是主攝像頭),mt9p017是攝像頭sensor驅動IC,raw是sensor一種輸出的數據格式,是CCD或CMOS在將光信號轉換為電信號時的電平高低的原始記錄,單純地沒有將沒有進行任何處理的圖像數據,即攝像元件直接得到的電信號進行數字化處理而得到的。

?

gc0329_yuv是前置攝像頭,yuvsensor一種輸出的數據格式,支持YUV/RGB格式的模組,一般會帶有ISP(image single processor),經過A/D轉換過的原始數據經過ISP處理生成YUV標準格式傳到BB。

?

我們采用的OV5640就帶有ISP,輸出YUV格式

?

(1)??把mt9p017_raw 改為ov5640_yuv,去掉gc0329_yuv因為我們的產品沒有后置攝像頭

(2)??去掉類似CUSTOM_KERNEL_LENS后面的dummy_lens因為沒有后置攝像頭

?

修改之后的HAL層的配置:

[html]?view plaincopy
  • 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??

  • 修改之后的kernel層的配置:

    [html]?view plaincopy
  • 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??


  • 雖然我們沒有后置攝像頭,但不能去掉dummy_lens,我嘗試過去掉之后用./mk r dr編譯會提示下面的錯誤:

    [plain]?view plaincopy
  • 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??


  • 4.2.2???????mediatek\custom\common\kernel\imgsensor----------kernel層

    ?

    (1)??創建ov5640_yuv并建立需要的文件

    ?

    創建文件夾ov5640_yuv,把sensor IC廠家提供的ov5640yuv_Sensor.c放到此目錄下。另外拷貝ov5642yuv_Sensor.h、ov5642yuv_Camera_Sensor_para.h、ov5642yuv_CameraCustomized.h拷貝過來改為ov5640yuv_Sensor.h等。

    ?

    編譯發現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是沒有這幾個宏定義,我暫時定義如下:

    [cpp]?view plaincopy
  • //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??

  • 這是參考ov5642的相關定義來定義的。

    ?

    (2)??在支持的sensor列表中增加目標sensor

    ?

    mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h

    在數組增加OV5640的內容,如下:

    [cpp]?view plaincopy
  • 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??
  • …………….??
  • }??

  • 也增加UINT32 OV5640_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT*pfFunc);

    mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h

    ?

    (3)??增加sensor ID和字符串的定義

    [cpp]?view plaincopy
  • #defineOV5640_SENSOR_ID????????????0x5640??
  • #defineSENSOR_DRVNAME_OV5640_YUV??"ov5640yuv"??

  • 4.2.3???????mediatek\custom\common\hal\imgsensor---------------HAL層

    ?

    (1)??創建ov5640_yuv文件夾

    但這些文件夾下該有哪些文件,有需要哪些內容了,首先我對比了

    ov3640_yuv和ov5642_yuv文件夾,只有cfg_ftbl_ov5642_yuv.h有差別:

    ?

    圖8

    這里主要是不同驅動IC支持的分辨率不同,以及設置默認的分辨率。


    圖9

    此文件下有兩個這樣的地方不同,這里是指自動對焦模式。

    ?

    因為我們的OV5640和OV5642非常接近,所以就直接把OV5642的目錄復制過來修改為OV5640即可。

    ?

    所以把mediatek\custom\common\kernel\imgsensor\ov5642_yuv拷貝到imgsensor目錄下,改為ov5640_yuv

    ?

    (2)??在支持的sensor列表中增加目標sensor

    ?

    \src\ sensorlist.cpp

    [cpp]?view plaincopy
  • MSDK_SENSOR_INIT_FUNCTION_STRUCTSensorList[]?=??
  • {??
  • ………..??
  • #ifdefined(OV5640_YUV)??
  • ????YUV_INFO(OV5640_SENSOR_ID,SENSOR_DRVNAME_OV5640_YUV,?NULL),??
  • #endif??
  • …………??
  • }??

  • 注意:在 kd_SensorList.h 和 SensorList.cpp 里面添加驅動的時候要注意,Sensor 添加的位置要一樣。否則驅動會跑亂,輕則 ISP 參數不對,重則 Sensor 無法啟動。

    ?

    ?

    4.3? 拍照圖片尺寸設置

    ?

    mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h

    [cpp]?view plaincopy
  • //?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.4? Camera物理角度旋轉

    Cfg_setting_imgsensor.h

    [cpp]?view plaincopy
  • /*******************************************************************************?
  • *?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;??
  • }??

  • 這幾種都試過了,但都不行,預覽和實際的都是成某種鏡像關系。這是平臺是提供旋轉的功能。這個配置好了之后,如果方向不正確,可以通過驅動中的方向調整函數進行調整,如下: static void XXXXXSetMirror(kal_uint16ImageMirror)

    參考:http://blog.csdn.net/loongembedded/article/details/41679977

    ?

    ?

    ?

    看了OV5640的數據手冊,寄存器0x3820和0x3821是用于控制圖像發射(mirror)和翻轉(flip)的,在u4Degree_0=270情況下,OV5640YUVPreview()調用OV5640YUV_Set_Mirror_Flip (IMAGE_V_MIRROR),預覽和拍照后的預覽都是OK,但拍好的照片在電腦上打開的時候發現是順時針翻轉了90度。

    http://bbs.csdn.net/topics/390837150

    ?

    可是我在OV5640YUV_Sensor_Init()調用OV5640YUV_Set_Mirror_Flip(IMAGE_V_MIRROR)卻問題依舊,很奇怪。

    ?

    mediatek\custom\common\hal\imgsensor\ov5640_yuv\cfg_ftbl_ov5640_yuv.h

    [cpp]?view plaincopy
  • /*?
  • ????//?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??
  • )??


  • ?

    我試過做上面的修改,但打開攝像頭的時候,提示”Unfortunately, Camera has stopped”

    ?

    ?

    ?

    參考鏈接:

    MTKAndroid Driver:camera

    http://blog.csdn.net/cbk861110/article/details/17437283

    ?

    ?

    MTK cameraimage sensor driver

    http://blog.csdn.net/sunweizhong1024/article/details/8497790

    ?

    MTK平臺的ISP架構問題

    http://bbs.52rd.com/forum.php?mod=viewthread&tid=272727

    ?

    OV5640 YUV的自動對焦功能為何沒有開啟

    http://www.16rd.com/thread-10480-1-1.html

    ?

    MTK Android Driver知識大全

    http://blog.csdn.net/cbk861110/article/details/40931835

    ?

    mtk camera移植步驟

    http://blog.csdn.net/vasvas/article/details/39250473

    ?

    關于 前置攝像頭安裝0度或者180度

    http://blog.csdn.net/kkkvvv123/article/details/8809823

    ?

    Camera 涉及的文件70

    http://3y.uu456.com/bp-6dq1aascss2707221q2ef7es-1.html

    ?

    OV5640全景模式預覽倒180度,拍照正常的問題

    http://blog.csdn.net/guoguo295/article/details/21245815

    總結

    以上是生活随笔為你收集整理的MTK6577+Android之Camera驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲毛片一级 | 动漫美女被到爽流 | 免费男女乱淫真视频免费播放 | 中国在线观看片免费 | av黄色国产 | 欧美福利网站 | 尤物精品在线 | 韩国bj大尺度vip福利网站 | 久久免费看少妇高潮v片特黄 | 少妇高清精品毛片在线视频 | 国产欧美精品一区二区三区app | 99热在线免费观看 | 玖玖玖国产精品 | 中国久久久久 | 香蕉尹人网| 日韩一级二级 | 国模大尺度视频 | 亚洲精品www久久久 一级aaa毛片 | 9999re| 天天色综合影视 | 羞羞涩涩网站 | 国产v综合v亚洲欧美久久 | 特级性生活片 | 在线欧美一区二区 | 国产精品久久久久久久久久久新郎 | av中文天堂| 中文字字幕一区二区三区四区五区 | a级片一级片 | 欧美一级免费在线观看 | 欧美激情国产日韩精品一区18 | 少妇肥臀大白屁股高清 | 亚洲天堂一区二区三区 | 伊人网综合网 | 日日摸日日添日日躁av | 91丨porny丨国产 | 又爽又黄又无遮挡 | 亚洲在线综合 | 国产无遮挡免费 | 久久久激情视频 | 综合天天色 | 成人福利一区二区三区 | 一道本在线观看 | 国内精品99 | 牛牛影视免费观看 | 婷婷六月色 | 国产国拍精品亚洲 | 高清无码一区二区在线观看吞精 | 欧美高清69hd | 日韩欧美成人一区二区三区 | 日韩有码在线视频 | 在线播放日韩av | 国产视频第一页 | 黄色av网站免费 | 丰满的女邻居 | 亚洲男女啪啪 | 日韩福利一区 | 在线黄色av网站 | 7色av| 久久美女av | 亚洲精品在线影院 | 东北女人啪啪ⅹxx对白 | 女同性αv亚洲女同志 | 欧美97| 欧美日韩小说 | 人人妻人人澡人人爽精品欧美一区 | 国产熟女高潮视频 | 亚洲精品日韩欧美 | 国产中文自拍 | 国产精品一区二区三区久久久 | 农村搞破鞋视频大全 | 久久久成人av | 大陆明星乱淫(高h)小说 | 婷婷丁香综合 | 在线看片网址 | 我要操av| 欧美黄色免费 | 清纯唯美亚洲 | 最新中文字幕在线观看 | 精品第一页 | 四虎新网址 | 欧美丰满美乳xxⅹ高潮www | 少妇久久精品 | 手机在线观看av片 | 最新日韩在线 | 亚洲天堂精品在线观看 | 五月天亚洲综合 | 亚洲综合图片区 | 亚洲国产成人精品久久久 | 国产草草浮力影院 | 国产日产欧洲无码视频 | 成人av免费看 | 日韩欧美国产成人精品免费 | 亚洲做受高潮无遮挡 | 欧美在线观看一区二区 | 动漫美女视频 | 日韩伦理一区二区 | 人妖性生活视频 | 欧美日韩视频在线观看一区 | 久久精品国产亚洲av麻豆 |