有限公司 上海 201210)0 引言隨著智能手機終端的高速發(fā)展,相機功能成為智能手機終端消費者高度關(guān)注的一個"/>
饒國明
(展訊通信< 上海> 有限公司 上海 201210)
隨著智能手機終端的高速發(fā)展,相機功能成為智能手機終端消費者高度關(guān)注的一個重要特性,同時也是智能終端控制芯片最重要、最具有技術(shù)含量的多媒體技術(shù)之一;隨著手機相機功能采用單反相機的技術(shù),手機終端控制芯片硬件模塊設(shè)計越來越復(fù)雜,同時客戶在智能手機中對相機的需求要求也越來越高,硬件模塊的技術(shù)快速發(fā)展和創(chuàng)新演進(jìn)以及客戶新的需求,要求相機軟件能夠快速地響應(yīng),完成開發(fā)和迭代。相機驅(qū)動軟件作為串聯(lián)整個相機軟件與手機控制芯片中相機硬件模塊的基礎(chǔ)層,需要能夠快速滿足多個手機控制芯片的硬件模塊適配實現(xiàn),快速演進(jìn)和滿足客戶新需求開發(fā)的交付要求。
根據(jù)上述的發(fā)展和要求,本研究對目前的智能手機驅(qū)動相機驅(qū)動軟件,從軟件架構(gòu)上進(jìn)行全新的系統(tǒng)架構(gòu)重新設(shè)計,提出了智能手機單軟多硬的驅(qū)動軟件架構(gòu),設(shè)計一套完整的相機驅(qū)動軟件架構(gòu),利用貨架化思路和分層封裝設(shè)計思路[1],來達(dá)到同一套驅(qū)動軟件支持不同的芯片項目的目的,使得后續(xù)新增芯片支持或者新增需求,相機驅(qū)動軟件能夠快速高效的完成,減少開發(fā)和維護(hù)成本。
當(dāng)前主流的相機驅(qū)動軟件架構(gòu),大多數(shù)是基于最早的第一批智能機時代設(shè)計的軟件架構(gòu),當(dāng)時的架構(gòu)設(shè)計缺乏下面的考慮和設(shè)計:
1)基于單芯片的軟件架構(gòu)出發(fā),沒有考慮同時有多個手機控制芯片的研發(fā)。
2)沒有考慮多個不同的智能終端控制芯片在硬件模塊上有一定繼承性的。
3)缺乏考慮芯片硬件模塊之間的共性技術(shù)處理。4)軟件架構(gòu)的可擴展性差。
5)軟件內(nèi)部的解耦性和貨架化差。6)缺乏軟件系統(tǒng)的分層封裝設(shè)計。當(dāng)前軟件架構(gòu)的問題,導(dǎo)致在軟件開發(fā)維護(hù)和新的需求開發(fā)上,維護(hù)成本高,開發(fā)效率低,體現(xiàn)在:
1)每增加一個智能終端控制芯片,由于驅(qū)動軟件架構(gòu)設(shè)計的缺陷,導(dǎo)致只能簡單地復(fù)制一份當(dāng)前相機驅(qū)動軟件,再根據(jù)智能終端芯片硬件模塊的修改,在復(fù)制的相機驅(qū)動軟件基礎(chǔ)上進(jìn)行修改,形成新的相機驅(qū)動軟件,沒有任何系統(tǒng)思維的設(shè)計分析。
2)如果某一智能終端控制芯片的相機驅(qū)動軟件修改了一個共性問題,必須在所有有問題的智能終端控制芯片平臺的相機驅(qū)動軟件上逐一進(jìn)行單獨修改,維護(hù)的工作量大,且容易出錯。
3)對一個共性問題的修改,在不同的智能終端控制芯片平臺上,由于是復(fù)制再修改,也增加了測試的工作量,延長了項目交付的時間點。
4)對于新需求的開發(fā),如果涉及相機軟件數(shù)據(jù)鏈路的調(diào)整,修改工作量繁瑣,支持不夠靈活,軟件數(shù)據(jù)鏈的設(shè)計沒有組件貨架化的思想。
相機驅(qū)動軟件所驅(qū)動的相關(guān)的芯片硬件模塊基本結(jié)構(gòu)如圖1 所示,每一個芯片的相機芯片硬件模塊都需要相機驅(qū)動軟件來驅(qū)動其正常工作,芯片中相機硬件模塊包括:連接攝像頭的接口、相機設(shè)備和處理器之間的串行接口、圖像信號處理等。
目前的相機驅(qū)動軟件系統(tǒng)的系統(tǒng)架構(gòu)設(shè)計,還是基于單個芯片的設(shè)計,沒有考慮多芯片適配,沒有考慮支持多芯片下驅(qū)動架構(gòu)的設(shè)計,當(dāng)前的架構(gòu)如圖2 所示:
在此架構(gòu)基礎(chǔ)上,照相驅(qū)動軟件與硬件模塊是按照不同的芯片項目進(jìn)行區(qū)分的,有幾個芯片項目,就有幾份類似的相機驅(qū)動軟件復(fù)制和修改,其基本的結(jié)構(gòu)基本是類似的,圖2 軟件結(jié)構(gòu)框圖中:
1)驅(qū)動軟件對外的統(tǒng)一接口都是從用戶接口層的標(biāo)準(zhǔn)應(yīng)用編程接口調(diào)用開始。
2)與數(shù)據(jù)流相關(guān)的控制直接和模塊控制層進(jìn)行交互。
3)和控制信息相關(guān)以及參數(shù)相關(guān)的配置,需要先經(jīng)過中間件&參數(shù)管理控制層后,再到驅(qū)動軟件的模塊控制層;中間件&參數(shù)管理控制層主要控制的是各個芯片硬件模塊的配置信息、相關(guān)圖像質(zhì)量管理的控制調(diào)度以及與算法相關(guān)的控制信息和參數(shù)配置信息。
4)模塊控制層主要負(fù)責(zé)配置各種芯片的參數(shù)和接受對應(yīng)數(shù)據(jù)流的回調(diào)。
5)設(shè)備控制層主要根據(jù)對應(yīng)的參數(shù)配置來完成對應(yīng)的圖像處理操作。
對于多芯片的相機驅(qū)動軟件,按照芯片項目來進(jìn)行區(qū)分,隨著芯片項目增多,軟件代碼將會非常分散和冗余。這種設(shè)計完全沒有考慮軟件架構(gòu)的復(fù)用性、可擴展性、軟件的可維護(hù)性,沒有考慮軟件工程的貨架化交付,沒有考慮軟件的維護(hù)成本、測試成本和人力投入。針對不同的芯片硬件模塊,需要建立在對多芯片的硬件模塊能力了解的基礎(chǔ)上,進(jìn)行理解抽象,分層封裝,同時要考慮對外提供統(tǒng)一的用戶編程接口中,包含差異化的參數(shù)信息[2]。目標(biāo)是能夠達(dá)到圖3 所示的從分散型的多芯片支持到集中式的多芯片結(jié)構(gòu)上的變化,實現(xiàn)單軟多硬設(shè)計方案。
為了達(dá)到上述單軟多硬的多芯片支持,從下面幾個方面對架構(gòu)進(jìn)行了思考和重構(gòu):
1)總體思路是在滿足對外統(tǒng)一接口的前提下根據(jù)不同芯片的硬件模塊配置情況完成所有接口所需要的功能,統(tǒng)一接口中包含的差異化的參數(shù)和控制信息,在整個驅(qū)動軟件內(nèi)部可以根據(jù)這些差異化信息進(jìn)行正確的處理,如果外部輸出的差異化參數(shù)信息存在異常,也能夠進(jìn)行有效的識別和相應(yīng)的錯誤處理[3]。
2)對圖2 中的中間件&參數(shù)管理控制層進(jìn)行了擴展重構(gòu),導(dǎo)入貨架化設(shè)計思想,所有模塊,按子模塊解耦設(shè)計,項目按需進(jìn)行組合,形成產(chǎn)品項目功能特性。各硬件模塊之間的差異,通過不同模塊進(jìn)行區(qū)分組合,不同芯片項目,不同客戶同模塊的不同圖像效果要求,通過模塊對應(yīng)的不同參數(shù)版本進(jìn)行分處理。
3)對圖2 中設(shè)備控制層中與邏輯無關(guān)的寄存器控制部分分離出來,增加寄存器控制層。
4)在設(shè)備控制層和寄存器控制層之間添加適配控制層,適配控制層提供統(tǒng)一的接口供設(shè)備控制層進(jìn)行調(diào)用。
新的多芯片相機驅(qū)動子系統(tǒng)結(jié)構(gòu)框圖如圖4:
對于多芯片單軟多硬相機驅(qū)動軟件子系統(tǒng)的適配控制層的整體結(jié)構(gòu)框圖如圖5:
整個設(shè)計思路如下[4]:
1)適配控制層處于模塊控制層和芯片硬件模塊之間,完成模塊控制層的參數(shù)配置,反饋圖像統(tǒng)計信息和圖像數(shù)據(jù),提供芯片硬件模塊輸入輸出能力。
2)不同項目的適配控制層所特有的芯片硬件模塊信息和適配控制層提供給模塊控制層的接口操作都會在設(shè)備樹DT(Device Tree)解析階段通過不同項目的設(shè)備節(jié)點進(jìn)行自適應(yīng),匹配掛載;用于掛載多芯片硬件模塊的信息接口,通常在手機開機啟動階段通過設(shè)備樹來進(jìn)行配置的。
3)各個軟件模塊的數(shù)據(jù)流和參數(shù)流分離,通過一些列操作獨立控制,互不影響,具備貨架化交付。
4)各種圖像數(shù)據(jù)流可配置,依據(jù)芯片硬件模塊特性進(jìn)行數(shù)據(jù)通路的配置。
在圖5 中,為了支持多芯片的單軟多硬的方案,需要能夠?qū)Χ嘈酒臄?shù)據(jù)通道的數(shù)據(jù)流進(jìn)行控制,這是實現(xiàn)單軟多硬方案的核心,因此需要對數(shù)據(jù)通路的數(shù)據(jù)狀態(tài)機進(jìn)行設(shè)計
1)適配控制層會根據(jù)不同芯片不同數(shù)據(jù)通路的不同應(yīng)用場景設(shè)定好各自的通路狀態(tài)。
2)模塊控制層收到回調(diào)指令后根據(jù)對應(yīng)的數(shù)據(jù)通路狀態(tài)完成各個硬件模塊的數(shù)據(jù)通路之間數(shù)據(jù)的流轉(zhuǎn)處理。
數(shù)據(jù)通路狀態(tài)機的設(shè)計結(jié)構(gòu)如圖6 所示,主要的設(shè)計關(guān)鍵點:
1)每條通路的初始狀態(tài)都為空閑狀態(tài)。
2)每個狀態(tài)的轉(zhuǎn)變表示一次數(shù)據(jù)通路的的數(shù)據(jù)處理。
3)當(dāng)狀態(tài)由其它狀態(tài)變?yōu)榭臻e狀態(tài)時,表示完成一次完整的數(shù)據(jù)通路的閉環(huán)處理,處理完的幀信息需要送往下一個數(shù)據(jù)通路。
4)不同項目的相同數(shù)據(jù)通路,可以是不同的數(shù)據(jù)通路狀態(tài)的閉環(huán)處理。
為了實現(xiàn)多芯片的單軟多硬方案,下面幾點技術(shù)點的實現(xiàn)將要考慮:
1)用于掛載多芯片硬件模塊的適配控制層,通常在開機階段通過設(shè)備樹配置發(fā)起,通過一個包含所有與芯片硬件模塊相關(guān)的信息和靜態(tài)全局的數(shù)據(jù)結(jié)構(gòu)來管理。不同的項目掛載不同的芯片硬件模塊對應(yīng)的適配控制層。
2)用于配置或者控制多芯片硬件模塊與芯片其它模塊交互的部分,需要考慮對各個硬件模塊的操作,包括:clock 時鐘操作、AXI 總線相關(guān)、Qos 相關(guān)操作等。
3)要考慮配置或控制多芯片硬件模塊的各自中斷處理,包括使能Enable、使無能Disable、清除Clear、請求Request、釋放Free、處理Process、錯誤處理Error_process 等中斷處理等。
4)不同項目的芯片之間用于圖像效果處理的模塊通常差異較大,包含的處理模塊可能存在差異,同樣模塊的參數(shù)配置也可能存在差異,需要根據(jù)不同項目各個芯片的支持情況進(jìn)行配置。通過設(shè)計一個公共函數(shù),獲取各芯片硬件模塊支持的圖像效果處理模塊操作函數(shù),此函數(shù)會根據(jù)傳遞進(jìn)來的軟件塊標(biāo)識信息,從一個包含所有芯片相關(guān)硬件塊的表中獲取對應(yīng)的軟件塊的模塊操作函數(shù)。
5)對于不同芯片硬件模塊的默認(rèn)參數(shù),包括一些寄存器的默認(rèn)配置,需要設(shè)立一個通用的參數(shù)接口來對不同芯片硬件模塊進(jìn)行配置。
6)在整個相機驅(qū)動軟件運行中,很多功能都需要各個芯片硬件模塊可以根據(jù)每一幀圖像和上層配置的命令動態(tài)的調(diào)整變化對應(yīng)的參數(shù),這些在不同的項目之間存在差異,需要設(shè)計時考慮提供一些對應(yīng)的統(tǒng)一接口。
綜上所述,通過單軟多硬的設(shè)計思路,對多芯片的相機軟件驅(qū)動子系統(tǒng)進(jìn)行重構(gòu),通過適配控制層的提取和設(shè)計,解決了長期存在相機驅(qū)動軟件開發(fā)難和維護(hù)難的痛點,確保了驅(qū)動軟件子系統(tǒng)的可維護(hù)性、可擴展性、可重用性,提升了驅(qū)動軟件開發(fā)的效率,縮短了驅(qū)動軟件的開發(fā)和交付周期。
當(dāng)然,要基于此新的驅(qū)動子系統(tǒng),后續(xù)增加新的芯片平臺或者增加新的硬件模塊,需要對新增的芯片平臺了解下面芯片的硬件能力:
1)各芯片硬件模塊所支持的數(shù)據(jù)通路數(shù)目。
2)各芯片硬件模塊所支持的最大處理圖像大小。
3)各芯片硬件模塊所支持的圖像處理模塊。
4)各芯片硬件模塊所支持的圖像處理格式。
5)各芯片硬件模塊所特有的硬件限制。
了解了上述芯片硬件模塊的基本信息,這樣才能更好的在此軟件架構(gòu)基礎(chǔ)上,進(jìn)行新增芯片的硬件模塊的驅(qū)動軟件實現(xiàn),實現(xiàn)貨架化交付。