亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux攝像頭驅(qū)動(dòng)的設(shè)計(jì)優(yōu)化及其對(duì)應(yīng)的Android下HAL封裝設(shè)計(jì)方法探究

        2016-11-09 01:11:43李宇成梁宗希
        關(guān)鍵詞:設(shè)備系統(tǒng)設(shè)計(jì)

        李宇成 梁宗希

        (北方工業(yè)大學(xué)電氣與控制工程學(xué)院 北京 100144)

        ?

        Linux攝像頭驅(qū)動(dòng)的設(shè)計(jì)優(yōu)化及其對(duì)應(yīng)的Android下HAL封裝設(shè)計(jì)方法探究

        李宇成梁宗希*

        (北方工業(yè)大學(xué)電氣與控制工程學(xué)院北京 100144)

        針對(duì)Android系統(tǒng)下攝像頭驅(qū)動(dòng)程序不開源的現(xiàn)狀,將借鑒Linux下的相關(guān)驅(qū)動(dòng)程序,提出一體化設(shè)計(jì)方案,對(duì)驅(qū)動(dòng)加以改進(jìn)設(shè)計(jì)和優(yōu)化,特別是在FIMC驅(qū)動(dòng)中,將FIMC和ov9650合成為了一個(gè)設(shè)備,顯著提高了驅(qū)動(dòng)的運(yùn)行效率。然后,通過對(duì)Android框架的分析,設(shè)計(jì)一種HAL模塊,采用三個(gè)線程并行完成攝像頭功能,并用此模塊對(duì)驅(qū)動(dòng)進(jìn)行封裝。內(nèi)容包括Linux攝像頭驅(qū)動(dòng)的開發(fā)與優(yōu)化,Android HAL模塊的設(shè)計(jì),以及將Linux攝像頭驅(qū)動(dòng)程序進(jìn)行HAL封裝的具體步驟。最后,給出實(shí)驗(yàn)結(jié)果。

        Linux攝像頭驅(qū)動(dòng)設(shè)計(jì)與優(yōu)化Android HAL設(shè)計(jì)HAL封裝方法

        0 引 言

        雖然在Linux下有一些攝像頭驅(qū)動(dòng)的資料,但是這些驅(qū)動(dòng)都不能夠直接應(yīng)用到Android系統(tǒng)下。導(dǎo)致這種現(xiàn)象的原因是:(1) Linux系統(tǒng)結(jié)構(gòu)與Android系統(tǒng)本身有很大區(qū)別;(2) Android框架底層有HAL(硬件抽象層),它將攝像頭驅(qū)動(dòng)與Android系統(tǒng)隔離。因而,只有將Linux攝像頭驅(qū)動(dòng)進(jìn)行重新設(shè)計(jì)和優(yōu)化,方能在Android系統(tǒng)下使用。而適用于Android系統(tǒng)的攝像頭驅(qū)動(dòng)的設(shè)計(jì)與優(yōu)化方法,鮮見有文獻(xiàn)涉及。

        另一方面,隨著Android系統(tǒng)的推廣,手機(jī)、移動(dòng)設(shè)備以及各種智能終端大量采用Android作為操作系統(tǒng)[1]。在Android系統(tǒng)中,與硬件相關(guān)的驅(qū)動(dòng)程序大都以HAL形式封裝起來了,目的是保護(hù)軟件開發(fā)商的利益。例如,HAL中的Camera HAL,是聯(lián)系上層攝像頭接口與下層Linux攝像頭驅(qū)動(dòng)的紐帶[2],它的設(shè)計(jì)好壞,直接影響到攝像頭功能的發(fā)揮[3]。目前,很多Android硬件廠商如三星、高通等都有自己的Camera HAL,別人無法獲得他們的源代碼,這就使得普通開發(fā)者無從研究HAL,給在Android下提高攝像頭效能和進(jìn)一步開發(fā)攝像頭程序帶來了很大的困難。

        鑒于上述現(xiàn)狀,很有必要研究適用于Android系統(tǒng)的Linux攝像頭驅(qū)動(dòng)設(shè)計(jì)與優(yōu)化方法以及Android Camera HAL的封裝方法,以便設(shè)計(jì)者在此基礎(chǔ)之上開發(fā)自己的應(yīng)用程序。本文首先借鑒Linux資料,提取Linux下的攝像頭驅(qū)動(dòng)的部分代碼加以補(bǔ)充設(shè)計(jì)和優(yōu)化,然后根據(jù)對(duì)Android架構(gòu)的分析,設(shè)計(jì)了一個(gè)s5pv210 Camera HAL模塊,并在模塊內(nèi)實(shí)現(xiàn)了一種Camera HAL的封裝方法。為在Android系統(tǒng)中利用和獲取Linux下的巨大開源資源提供了一個(gè)范例。

        1 Linux攝像頭模塊設(shè)計(jì)與優(yōu)化

        Linux下攝像頭模塊主要包括四個(gè)方面[4-6]:V4L2驅(qū)動(dòng),F(xiàn)IMC模塊,攝像頭驅(qū)動(dòng)以及i2c驅(qū)動(dòng)。本文攝像頭模塊設(shè)計(jì)架構(gòu)如圖1所示,F(xiàn)IMC模塊調(diào)用攝像頭驅(qū)動(dòng)并為V4L2提供接口,攝像頭驅(qū)動(dòng)獲取視頻數(shù)據(jù)并傳給FIMC,i2c驅(qū)動(dòng)完成攝像頭與開發(fā)板之間的通信。

        圖1 Linux攝像頭驅(qū)動(dòng)設(shè)計(jì)框架

        1.1Linux攝像頭模塊與Android Camera HAL的一體化設(shè)計(jì)

        Linux為建立視頻設(shè)備工作環(huán)境,需要借助V4L2架構(gòu),建立struct video_device,而struct video_device的控制函數(shù)struct v4l2_ioctl_ops和文件操作函數(shù)struct v4l2_file_operations等由FIMC驅(qū)動(dòng)實(shí)現(xiàn)。本文建議的一體化設(shè)計(jì),是將struct v4l2_ioctl_ops和struct v4l2_file_operations的成員函數(shù)videoc_reqbufs(),videoc_querybuf(),open(),release()等封裝進(jìn)V4L2驅(qū)動(dòng)核心,再由Android HAL對(duì)V4L2進(jìn)行封裝。Android上層應(yīng)用程序訪問Camera HAL時(shí),根據(jù)本設(shè)計(jì),會(huì)調(diào)用到V4L2,進(jìn)而調(diào)用攝像頭驅(qū)動(dòng)。

        根據(jù)Linux驅(qū)動(dòng)原理,V4L2為調(diào)用攝像頭驅(qū)動(dòng)提供統(tǒng)一接口,本設(shè)計(jì)中將V4L2直接嵌入HAL,使Linux攝像頭驅(qū)動(dòng)與Android HAL聯(lián)為一體。同時(shí),V4L2與HAL之間并未額外添加新的結(jié)構(gòu)層,而是直接把V4L2嵌入到HAL之中,這使整個(gè)攝像頭模塊獲得了一個(gè)較高的運(yùn)行效率。攝像頭驅(qū)動(dòng)與Android Camera HAL一體化設(shè)計(jì)方案如圖2所示。

        圖2 Linux攝像頭模塊與Android Camera HAL一體化方案

        1.2i2c驅(qū)動(dòng)設(shè)計(jì)

        攝像頭的工作方式需要通過i2c總線來進(jìn)行設(shè)置,因此,本質(zhì)上可以認(rèn)為攝像頭是一個(gè)i2c設(shè)備,而在i2c驅(qū)動(dòng)當(dāng)中,最重要的結(jié)構(gòu)體是i2c_client和i2c_adapter,前者表示一個(gè)i2c從器件,后者代表i2c總線控制器和訪問i2c總線必須的算法。

        圖3所示的驅(qū)動(dòng)設(shè)計(jì)框圖是整個(gè)i2c設(shè)備數(shù)據(jù)結(jié)構(gòu)的信息。設(shè)備i2c_client,最初是被i2c_new_device()所創(chuàng)建的,并被device_register()在內(nèi)部調(diào)用,掛載到i2c_bus上。掛載上之后,相應(yīng)的設(shè)備文件會(huì)在/sys/bus/i2c文件夾下生成。如果設(shè)備名稱和ov9650驅(qū)動(dòng)匹配成功,對(duì)應(yīng)的probe()函數(shù)會(huì)被調(diào)用,而且系統(tǒng)會(huì)為圖3所示的ov9650結(jié)構(gòu)分配內(nèi)存,并且初始化各種數(shù)據(jù)變量。

        圖3 SCCB驅(qū)動(dòng)設(shè)計(jì)

        1.3FIMC驅(qū)動(dòng)設(shè)計(jì)與優(yōu)化

        FIMC主要用于實(shí)現(xiàn)視頻數(shù)據(jù)接口,同時(shí),它也完成圖像數(shù)據(jù)顏色空間的轉(zhuǎn)換操作。由圖4可知,左邊FIMC驅(qū)動(dòng)的fimc_vid_cap包含了video_device,并且實(shí)現(xiàn)了控制函數(shù)v4l2_ioctl_ops與文件操作函數(shù)v4l2_file_operations等,video_device由圖2中的V4L2驅(qū)動(dòng)進(jìn)行調(diào)用。

        圖4 優(yōu)化后的fimc驅(qū)動(dòng)架構(gòu)

        在Linux下,fimc與ov9650是兩個(gè)獨(dú)立的設(shè)備模塊,各自擁有不能互訪的內(nèi)存空間。通常需要映射一塊共享內(nèi)存來完成兩者之間的數(shù)據(jù)交換,其好處是,保證了兩個(gè)驅(qū)動(dòng)的相互獨(dú)立性,缺點(diǎn)是信息交換不如在同一設(shè)備內(nèi)部來的方便。一種簡單的技巧是,在fimc_dev所屬的media_entity以及ov9650所屬的media_entity之間添加pads和list_head變量,使它們同時(shí)都掛載在了圖4右側(cè)的media_device設(shè)備上,當(dāng)FIMC和ov9650中的media_entity都被初始化之后,fimc_md結(jié)構(gòu)體中的fimc_md_probe()函數(shù)將把fimc與ov9650模塊綁定在一起,初始化之后,F(xiàn)IMC和ov9650就合成為一個(gè)大的設(shè)備。由此,這兩個(gè)模塊就能進(jìn)行無內(nèi)外差別的數(shù)據(jù)完全共享。由于兩個(gè)設(shè)備之間的數(shù)據(jù)訪問同步機(jī)制要比同一設(shè)備內(nèi)(抽象的大設(shè)備)訪問的同步機(jī)制復(fù)雜,因此采用合成大設(shè)備的技巧能略微提高數(shù)據(jù)交換效率,在本文的實(shí)驗(yàn)環(huán)境下,優(yōu)化后的驅(qū)動(dòng)給攝像頭模塊的幀率帶來了2-3FPS的提升。

        完成Linux下驅(qū)動(dòng)的優(yōu)化設(shè)計(jì)之后,需要進(jìn)行Android下HAL模塊的設(shè)計(jì)與實(shí)現(xiàn),HAL模塊沒有統(tǒng)一公開的設(shè)計(jì)方法。本文通過對(duì)Android框架的仔細(xì)研究,設(shè)計(jì)了s5pv210 HAL模塊,并在其中采用自定義函數(shù)來封裝V4L2接口,實(shí)現(xiàn)Android對(duì)Linux驅(qū)動(dòng)的調(diào)用。

        2 Camera HAL的設(shè)計(jì)與實(shí)現(xiàn)

        Android Camera系統(tǒng)使用Linux攝像頭模塊需要Camera HAL[7-9],本文在Android Camera系統(tǒng)的基礎(chǔ)上,首先設(shè)計(jì)s5pv210 HAL模塊,并在其內(nèi)部嵌入V4L2接口函數(shù)。s5pv210 HAL用于封裝V4L2接口的函數(shù)如圖5所示,其中,startPreview()和stopPreview()用于控制預(yù)覽的啟/停,startRecording()與stopRecording()用于控制視頻的啟/停,takePicture()與cancelPicture()用于拍照和刪除照片,其他內(nèi)容如分配內(nèi)存,攝像頭參數(shù)設(shè)置等,都需要用相應(yīng)的封裝函數(shù)來實(shí)現(xiàn)。

        圖5 s5pv210 HAL中定義的函數(shù)

        本文設(shè)計(jì)的Camera HAL,根據(jù)攝像頭的功能需求實(shí)現(xiàn)了三個(gè)線程。

        1) 預(yù)覽線程:預(yù)覽是拍照和攝像的基礎(chǔ)。

        2) 拍照線程:該線程需要實(shí)現(xiàn)圖像格式數(shù)據(jù)轉(zhuǎn)換。

        3) 攝像線程:屏幕顯示可以調(diào)用預(yù)覽線程,同時(shí),要進(jìn)行格式轉(zhuǎn)換并在本地保存視頻文件。

        S5pv210 HAL的總體設(shè)計(jì)框圖如圖6所示,s5pv210 HAL的框架由預(yù)覽、拍照、攝像三個(gè)部分組成,各部分封裝的過程類似。圖7中預(yù)覽模塊的startpreview()接口函數(shù),其中封裝的是Linux下編寫的V4L2完成攝像頭預(yù)覽的過程。而圖5中的startRecording()接口函數(shù),則屬于攝像模塊,其中封裝的是調(diào)用V4L2完成攝像的過程。與預(yù)覽過程不同的是,攝像的過程包含了格式轉(zhuǎn)換與本地文件的保存功能。各個(gè)模塊雖然功能有差異,但HAL封裝方法相同。下面以預(yù)覽模式為例說明本文HAL的函數(shù)封裝方法。

        圖6 s5pv210 hal總體設(shè)計(jì)

        事實(shí)上,開始預(yù)覽之前,上層應(yīng)用在做完準(zhǔn)備工作(設(shè)置各種參數(shù))之后,僅僅會(huì)調(diào)用android::startpreview()這一個(gè)函數(shù),隨后經(jīng)過層層調(diào)用,最終調(diào)用到s5pv210 HAL模塊中的函數(shù)s5pv210 hal::startpreview()。因此,HAL預(yù)覽模塊要做的工作,就是把從設(shè)置V4L2到獲得視頻幀地址的所有過程都封裝到s5pv210 HAL的startpreview()函數(shù)之中,如圖7所示。

        圖7 hal預(yù)覽模塊startpreview()函數(shù)封裝

        本設(shè)計(jì)中,s5pv210 HAL預(yù)覽模塊所包含的具體流程有:1) 打開視頻設(shè)備、設(shè)置視頻格式;2) 分配內(nèi)存、讀取數(shù)據(jù);3) 數(shù)據(jù)回調(diào)。從程序的健壯性考慮,上述步驟不應(yīng)直接整體封裝到startpreview()函數(shù)之中,而應(yīng)該分成多個(gè)自定義函數(shù),最后再把這些函數(shù)嵌入進(jìn)預(yù)覽模塊startpreview()中。

        下面以O(shè)V9650為例,來實(shí)現(xiàn)預(yù)覽模塊的三個(gè)部分。

        (1) 打開視頻設(shè)備、設(shè)置視頻格式的實(shí)現(xiàn)

        打開視頻設(shè)備使用的是Linux驅(qū)動(dòng)下的v4l2接口中的open()函數(shù),此函數(shù)會(huì)調(diào)用fimc驅(qū)動(dòng)中的open()函數(shù)的實(shí)現(xiàn)體,最終實(shí)現(xiàn)設(shè)備文件的打開,視頻格式的設(shè)置使用ioctl()函數(shù),該函數(shù)經(jīng)過V4L2,fimc最終調(diào)用攝像頭驅(qū)動(dòng),通過i2c對(duì)攝像頭進(jìn)行參數(shù)設(shè)置。

        void Ov965xCamera::init() {

        struct v4l2_format fmt;

        struct v4l2_requestbuffers req;

        struct v4l2_buffer b;

        captureBuf =

        (videobuffer*)calloc(1,sizeof(videobuffer));

        //分配緩存

        enum v4l2_buf_type type =

        V4L2_BUF_TYPE_VIDEO_CAPTURE;

        v4l2_fd =

        open(″/dev/video0″, O_RDWR | O_NONBLOCK);

        //打開視頻設(shè)備

        ……

        }

        這是嵌入到預(yù)覽模塊startpreview()函數(shù)內(nèi)的一個(gè)自定義函數(shù),其中聲明了V4L2視頻格式變量,內(nèi)存變量等,并打開了攝像頭設(shè)備文件,得到了文件句柄。

        其中,省略的部分里還包含設(shè)置視頻格式,檢查V4L2兼容性等其他操作。設(shè)置視頻的長、寬和格式的方法如下所示。

        if(v4l2_fd != -1){

        memset(&fmt, 0, sizeof fmt);

        //設(shè)置攝像頭輸出參數(shù)

        fmt.type =

        V4L2_BUF_TYPE_VIDEO_CAPTURE;

        //設(shè)置v4l2模式

        fmt.fmt.pix.width = mWidth;

        //設(shè)置寬

        fmt.fmt.pix.height = mHeight;

        //設(shè)置高

        fmt.fmt.pix.pixelformat =

        V4L2_PIX_FMT_RGB565;

        //設(shè)置視頻格式

        fmt.fmt.pix.sizeimage =

        (fmt.fmt.pix.width * fmt.fmt.pix.height * 2);

        fmt.fmt.pix.field = V4L2_FIELD_NONE;

        if (ioctl(v4l2_fd, VIDIOC_S_FMT, &fmt) < 0) {

        LOGE(″cannot set fmts ″);

        return;

        }

        ……

        }

        (2) 分配內(nèi)存、讀取數(shù)據(jù)的實(shí)現(xiàn)

        進(jìn)程之間傳遞大量數(shù)據(jù)時(shí),一般使用共享內(nèi)存的方式。在Android Binder IPC中,Android系統(tǒng)實(shí)現(xiàn)了一個(gè)匿名共享內(nèi)存子系統(tǒng)。這種Android特有的進(jìn)程間共享內(nèi)存的方式避免了內(nèi)存拷貝,代之以在進(jìn)程間傳遞內(nèi)存基址和偏移值。

        在Android的應(yīng)用程序框架層,提供了兩個(gè)C++類MemoryBase和MemoryHeapBase來使用匿名共享內(nèi)存。下述代碼段的initheap()函數(shù),是本文封裝到預(yù)覽模塊的另一個(gè)自定義函數(shù),用于建立程序的緩存。initheap()函數(shù)首先創(chuàng)建堆內(nèi)存MemoryHeapBase,然后創(chuàng)建kBufferCount塊分割內(nèi)存,MemoryBase將堆內(nèi)存分割,每一塊用來存儲(chǔ)一幀視頻。開辟好內(nèi)存,就可以讀取,處理數(shù)據(jù)了。

        void CameraHardware::initHeap(){

        //開辟Android下內(nèi)存空間

        int preview_width, preview_height;

        mParameters.getPreviewSize 〗(&preview_width, &preview_height);

        int how_big =

        preview_width * preview_height*2;

        //rgb565

        mPreviewFrameSize = how_big;

        mPreviewHeap = new MemoryHeapBase

        (mPreviewFrameSize * kBufferCount);

        for (int i = 0; i < kBufferCount; i++) {

        //開辟4塊緩存

        mBuffers[i] =

        new MemoryBase(mPreviewHeap, i * 〗mPreviewFrameSize, mPreviewFrameSize);

        }

        mOv9650Camera = new Ov9650Camera

        (preview_width, preview_height);

        }

        讀取數(shù)據(jù)的過程被封裝到如下自定義函數(shù)Ov965x Camera::getNextFrameAsRgb565()中,該函數(shù)通過調(diào)用V4L2的接口,采用標(biāo)準(zhǔn)的V4L2獲取數(shù)據(jù)的方式獲取數(shù)據(jù),如下:

        void Ov965xCamera::getNextFrameAsRgb565(uint16_t *buffer) {

        struct v4l2_buffer camb;

        memset(&camb, 0, sizeof camb);

        camb.type =

        V4L2_BUF_TYPE_VIDEO_CAPTURE;

        camb.memory = V4L2_MEMORY_MMAP;

        camb.index = 0;

        ioctl(v4l2_fd, VIDIOC_DQBUF, &camb);

        memcpy(buffer,(uint16_t *)

        captureBuf[camb.index].ldata,mWidth*mHeight*2);

        //把數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間

        ioctl (v4l2_fd, VIDIOC_QBUF, &camb);

        }

        (3) 數(shù)據(jù)回調(diào)的實(shí)現(xiàn)

        在startpreview()函數(shù)中,還包含一部分功能語句。例如,上述讀取完成之后,直接將幀數(shù)據(jù)的內(nèi)存地址傳給系統(tǒng)的回調(diào)函數(shù)mDataCb(),并由上層service對(duì)數(shù)據(jù)進(jìn)行處理。如:

        if (mMsgEnabled & CAMERA_MSG_PREVIEW_FRAME)

        mDataCb(CAMERA_MSG_PREVIEW_FRAME〗,buffer, mCallbackCookie);

        //系統(tǒng)數(shù)據(jù)回調(diào)

        這時(shí),回調(diào)函數(shù)會(huì)通知cameraservice預(yù)覽準(zhǔn)備工作已做好,接下來cameraservice會(huì)把數(shù)據(jù)幀送到屏幕顯示。

        由此可見,預(yù)覽模式的封裝過程是,從Linux驅(qū)動(dòng)中,找出V4L2關(guān)于攝像頭初始化以及其它操作的接口,同時(shí)添加必要的功能語句,然后將其嵌入到s5pv210 HAL模塊的預(yù)覽函數(shù)中,最后,在函數(shù)startpreview()中完成向cameraservice傳送數(shù)據(jù)的功能。

        拍照模塊和錄像模塊與預(yù)覽模塊類似,拍照模塊需要編寫圖片格式的數(shù)據(jù)頭,錄像模塊需要編寫視頻的格式轉(zhuǎn)換與本地文件的保存,二者的HAL封裝過程都與預(yù)覽模式類似。封裝完成之后,編譯HAL成.so庫的形式,放在Android的文件系統(tǒng)的system/lib目錄下即可[10]。

        3 實(shí)驗(yàn)結(jié)果

        測(cè)試選用的是友善的tiny210開發(fā)板,處理器芯片是三星的s5pv210,Android版本為2.3,根文件系統(tǒng)采用nfs掛載的方式,把HAL的.so庫放在nfs的根文件目錄中,開機(jī)打開攝像頭設(shè)備,驅(qū)動(dòng)加載如圖8所示。

        圖8 Linux攝像頭驅(qū)動(dòng)加載

        在eclipse調(diào)試中可查看HAL載入情況。

        運(yùn)行Android的攝像頭應(yīng)用程序,使之處在預(yù)覽模式當(dāng)中,應(yīng)用程序作為客戶端會(huì)向服務(wù)端發(fā)送消息,服務(wù)端獲得消息后經(jīng)過層層調(diào)用,最終調(diào)用到HAL封裝中的預(yù)覽線程。預(yù)覽線程內(nèi)封裝了對(duì)V4L2進(jìn)行初始化的各種函數(shù),這樣,就把Android上層應(yīng)用與Linux下層攝像頭驅(qū)動(dòng)連接了起來。實(shí)驗(yàn)效果如圖9所示。

        圖9 ov9650預(yù)覽效果(視頻分辨率800×480)

        4 結(jié) 語

        本文首先在Linux系統(tǒng)下設(shè)計(jì)實(shí)現(xiàn)了一款適用于Android系統(tǒng)的ov9650攝像頭驅(qū)動(dòng),并優(yōu)化了FIMC驅(qū)動(dòng)使之與攝像頭驅(qū)動(dòng)成為一個(gè)整體,提高了二者之間的數(shù)據(jù)傳輸效率。然后又重點(diǎn)探究了與該攝像頭驅(qū)動(dòng)對(duì)應(yīng)的Android下的Camera HAL的封裝方法,詳細(xì)講述了Camera HAL的封裝過程。針對(duì)Android系統(tǒng)下攝像頭驅(qū)動(dòng)程序不開源的現(xiàn)狀,本文具體示范了將Linux下的開源驅(qū)動(dòng)程序封裝到Android下的方法,供開發(fā)者參考。最后實(shí)驗(yàn)結(jié)果證明,該方法正確可靠,根據(jù)方法設(shè)計(jì)的HAL能夠滿足攝像頭正常工作。

        [1] 溫敏,艾麗蓉,王志國.Android智能手機(jī)系統(tǒng)中文件實(shí)時(shí)監(jiān)控的研究與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2009, 9(7):1716-1719.

        [2] 楊長剛.深入剖析Android系統(tǒng)[M].北京:電子工業(yè)出版社,2013.

        [3] James Talbot,Justin McLean.Learning Android Application Programming:A Hands-On Guide to Building Android Applications[M].Addison-Wesley Professional,2013.

        [4] 李宇成,黃堂猛.基于S5PV210的超高清視頻系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(11):3813-3819.

        [5] Greg Milette,Adam Stroud.Professional Android Sensor Programming[M].Wrox Press,2012.

        [6] 童方圓,于強(qiáng).基于Android的實(shí)時(shí)視頻流傳輸系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(12):4639-4642.

        [7] 羅升陽.Android系統(tǒng)源代碼情景分析[M].北京:電子工業(yè)出版社,2012.

        [8] 余成鋒,李代平,毛永華.Android 3.0內(nèi)存管理機(jī)制分析[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):229-230.

        [9] 李宇成,李聰.基于DM368的視頻處理及軟件設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2013,21(10):2865-2867,2871.

        [10] 農(nóng)麗萍,王力虎,黃一平.Android在嵌入式車載導(dǎo)航系統(tǒng)的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(11):2473-2476.

        DESIGN AND OPTIMISATION OF LINUX CAMERA DRIVER AND PROBING CORRESPONDING METHOD OF HAL ENCAPSULATION AND DESIGN UNDER ANDROID

        Li YuchengLiang Zongxi*

        (College of Electrical and Control Engineering,North China University of Technology,Beijing 100144,China)

        For current status of camera driver in Android system not being the open-source, by learning form the related driver in Linux, we proposed an integrated design scheme to improve the design of driver and optimise it as well, especially in FIMC driver, we composed the FIMC and ov9650 into a single device, this significantly improved the operation efficiency of camera driver. After that, by analysing Android framework, we designed a HAL module, which completes the functions of camera with three threads in parallel, we also used it to encapsulate Linux camera driver. The content of the paper includes the design and optimisation of Linux camera driver, the design of Android HAL module, and the specific procedure of encapsulating the Linux camera driver with HAL. In end of the paper we submit the experimental result.

        Linux camera driver design and optimisationAndroid HAL designEncapsulation method with HAL

        2015-03-18。李宇成,教授,主研領(lǐng)域:智能控制,圖像處理,嵌入式開發(fā)。梁宗希,碩士。

        TP311.5

        A

        10.3969/j.issn.1000-386x.2016.09.059

        猜你喜歡
        設(shè)備系統(tǒng)設(shè)計(jì)
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機(jī)系統(tǒng)
        ZC系列無人機(jī)遙感系統(tǒng)
        瞞天過?!律O(shè)計(jì)萌到家
        基于MPU6050簡單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        国产人妻无码一区二区三区免费| 国产肥熟女免费一区二区| 欧美国产亚洲日韩在线二区| aaa级久久久精品无码片| 国产精品一区二区久久乐下载| 免费啪啪av人妻一区二区| 白浆国产精品一区二区| 成人美女黄网站色大免费的| 日韩中文字幕中文有码| 国产在线观看不卡网址| 国产午夜视频在线观看.| 午夜视频在线在免费| 在线免费观看韩国a视频| 性一交一乱一乱一视频亚洲熟妇 | 亚洲丁香五月天缴情综合| 九九99国产精品视频| 青青草成人原视频在线播放视频| 亚洲综合网国产精品一区| 精品久久久中文字幕人妻| 阿v视频在线| 亚洲黄色精品在线播放| 欧美亚洲日本国产综合在线美利坚| 在线永久看片免费的视频| 东京热加勒比日韩精品| 97超碰精品成人国产| 国产办公室沙发系列高清| 中文人妻无码一区二区三区| 青青草免费观看视频免费| 国产a在亚洲线播放| 中文字幕人妻偷伦在线视频| 日韩女优一区二区视频| 国产不卡在线视频观看| 国产又爽又粗又猛的视频| 婷婷激情六月| 中文字幕亚洲精品专区| 东北老女人高潮大喊舒服死了| 日韩国产欧美| 狼人综合干伊人网在线观看| 精品精品国产高清a毛片| 国产乱理伦片在线观看| 国产精品一区二区三密桃|