數位視訊技術正由攝影機與保全系統等專用應用領域快速擴展到各種消費性電子產品,這對於傳統的視訊開發方法造成極大的挑戰。長久以來,這些開發方法皆需要熟悉最新編碼/解碼 (編解碼器) 標準並能為高效能訊號處理平台撰寫組合語言程式碼的專家手動撰寫大量程式碼。
為解決此方面的難題,訊號處理技術製造商推出將處理器、開發工具、軟體及系統專業技術高度整合的開發環境,讓設計人員能夠在高系統層級的抽象環境下開發視訊應用。這使得設計人員能專注於開發應用功能,以及透過應用程式設計介面 (API) 的簡單呼叫便能執行視訊、音訊、語音及影像處理技術,以處理特定編解碼器引擎執行及調整螢幕解析度等細節。
新一代視訊應用
隨著數位視訊執行的成本不斷下降,愈來愈多的嵌入式開發人員開始在各種產品中整合音訊及視訊技術。例如,圖 1 顯示機上盒 (STB) 如何整合住家保全系統的功能,以便家庭用戶從電視螢幕監視訪客。同時,傳統與非傳統視訊應用的品質也不斷提升。為了有效調整對比度與焦距,目前正在開發更有效的演算法。彈性的處理選項也能讓使用者透過黑白、彩色、紅外線、熱感應等各種設定來擷取影像。此外,目前也已開發智慧型攝影機,可在鏡頭裡的所有人都睜眼時才擷取影像。
《圖一 將機上盒整合於住家保全系統的範例,可用以監視進出前門的訪客,並在電視螢幕上顯示通知。》
|
傳統的編解碼器執行方法
逐漸廣泛使用的視訊與複雜性不斷提高的新型視訊應用突顯出傳統視訊開發方法本身的侷限性。傳統方法其中一個最大的障礙就是需要對編解碼器演算法進行手動編碼,才能壓縮數位串流進行傳輸或儲存,並予以解壓縮進行檢視和編輯。目前的編解碼器標準相當複雜,且仍然不斷演進,以增強視訊品質和降低頻寬佔用。
因此,工程人員一般需要許多人月(man-months)的時間才能完成嵌入式視訊應用的執行。通常,編解碼器是先以 C/C++ 等高階語言開發,然後以組合語言重新撰寫其中部分的程式碼,以根據硬體執行以最佳化其效能與功耗。上述程式設計工作的第二階段需熟練掌握特定硬體平台的大量專業技能。
雖然 MPEG2 等舊型編解碼器已穩定成型,但 MPEG4 與 H.264 等最新的高效編解碼器仍然持續演進,因此必須在產品開發過程中及未來升級時考慮編解碼器更改的可能性。此外,新型編解碼器也提供多樣化的工具組,可為開發人員在設定視訊串流時提供更多選擇。例如,某些編解碼器視訊串流允許使用隔行掃描,而某些則不允許。
硬體考量
編解碼器通常是在特殊應用積體電路 (ASIC) 或數位訊號處理器 (DSP) 上執行。ASIC 為針對各個應用的客製化設計,因此通常功耗較低,外型尺寸也相對較小。使用 ASIC 的缺點是工程設計僅適用於特定應用,因此成本較高,而且若要根據不斷發展的編解碼器標準進行更改,成本也會較高。新編解碼器的執行通常需要增加 ASIC 裝置的晶片大小。
DSP 則能提供全面的軟體程式設計功能,其中包括現場重新程式設計功能,以便使用者在推出 MPEG 2 產品之後能夠將其升級到 H.264 視訊編解碼器。此外,DSP 也有助於簡化可支援多種編解碼器產品的開發,並能根據標準的變化即時更新編解碼器。此外,也可將 DSP整合於單晶片系統 (SoC) 中,與一般用途處理器 (GPP) 及加速器等其他功能相互結合,以降低元件數。
應用方面
數位視訊執行只是目前大多數創新應用的一部分。而如今的應用,通常於 GPP 上運作的,並可提供讓其在同一個產品類別中實現產品差異化的使用者介面及特定功能。應用的其中一個重要角色就是實現軟硬體的整合,例如,在編解碼器與視訊連接埠之間提供視訊緩衝。此外,應用也需要 Linux 或 Windows CE 等作業系統,以處理乙太網路通訊堆疊、無線通訊堆疊、輸入/輸出設備驅動程式等。
透過軟體進行硬體抽象
新一代視訊產品的開發人員需要讓進階功能的產品快速上市,以確保在競爭中保持領先。為達成上述目標,必須將資源儘可能專注於應用本身,而不應受視訊執行的細節所干擾。
為滿足上述要求,視訊硬體開發人員推出了涵蓋軟硬體、工具及支援的整合式環境,以大幅簡化數位視訊技術的執行。此類環境可提供由多家公司開發且整合數位視訊系統元件的開放式平台,以降低視訊系統的複雜性。這些高效能訊號處理平台目前包含生產就緒的軟體,如硬體驅動程式、手動最佳化的編解碼器,及管理網路上音訊視訊同步與串流的應用程式碼。
新架構提供的 API 使開發人員能專注於應用開發工作,而無需為視訊執行問題浪費過多時間,也不需要進行 DSP 程式設計。將硬體執行細節與硬體在應用方面的使用相互分離後,開發人員便能迅速將應用移植至新平台與新作業系統,這一般只需更改 API 之後的驅動程式即可。
撰寫應用程序的開發人員只需呼叫標準程式庫函數便能執行各種視訊、影像處理、語音與音訊編解碼器及其他視訊和音訊功能。圖二中的範例顯示開發人員如何以 ProcessVideo() 等函數呼叫以存取視訊串流,而不需要顧慮實際編解碼器執行的細節問題。
《圖二 顯示開發人員如何使用 API 架構呼叫標準程式庫函數已進行視訊執行、影像處理及語音編解碼器,以簡化開發過程。》 |
API 本身由硬體製造商提供,並針對硬體執行進行最佳化。若換用新的硬體,則只需更換新的驅動程式即可,而無需更改應用程式碼。若標準發生更改或發佈新標準,則硬體製造商可更新編解碼器,應用開發人員便只需下載新的軟體庫,而不需要重新撰寫程式碼。此種做法有助於大幅降低視訊開發的成本,並可縮短產品的上市時程。
存取任何來源的視訊
上述做法的主要優勢在於不需要對應用程式碼做出重大更改,便能夠存取各種來源的視訊串流。例如,使用下列程式碼即可存取硬碟等 ATA 週邊的視訊,而只要將這段範例程式碼(如圖三)略做修改,便能存取任何來源的視訊。
《圖三 範例程式碼》 |
透過 API,開發人員可根據視訊引擎來配置硬體,以確保特殊應用能夠滿足複雜的程式設計要求,例如影像尺寸、單位像素位元等,此外也能夠管理北橋緩衝記憶體與內建螢幕顯示功能等。
更改顯示尺寸
下列範例程式碼(如圖四)顯示如何在開啟及配置視訊串流後輕鬆更改顯示尺寸。這段程式碼能讓機上盒使用相同的程式碼直接連接家庭劇院顯示器,並將內容下載至個人視訊播放器。
《圖四 例程式碼》 |
新的系統層級抽象做法可顯著簡化進階視訊功能的執行。圖五中的程式碼顯示如何以此種做法來執行時間轉移(time-shifting),以便在不立即播放的情況下,將即時視訊儲存於磁碟中,讓使用者能暫停播放,而不錯過任何節目。
《圖五 這段程式碼顯示系統層級抽象做法如何以執行時間轉移來管理機上盒播放,以便將即時視訊儲存於磁碟中,而無需立即播放,進而提升使用者的體驗。》 |
輸入/輸出層驅動程式
上述各種功能背後的複雜細節皆由透過通用 API 存取的低階驅動程式所完成,因此對於開發人員而言為完全透明。採用一般熟悉且受到廣泛支援的 Linux 驅動程式可簡化視訊技術於嵌入式應用中的整合工作。使用 Linux 社群相當熟悉的 API,例如擷取端的 Video for Linux Two (V4L2) API 與通用 FBDev API 等,能簡化從 PC 開發環境到嵌入式 SOC 環境的轉移。
此外,硬體裝置的運算資源在無需使用任何組合語言程式設計的情況下,也能以最佳方式執行。其中包括各種複雜操作,例如 DSP 資源使用最佳化及以硬體為基礎的加速引擎、透過訊號鏈模式使用增強型直接記憶體存取週邊以提高資料傳輸效率,以及透過中斷模式和小型任務模式中的封包處理來彈性滿足不同應用要求。
概括來說,新型設計法能使開發人員透過 API 實現全面性的視訊功能,而無需顧慮視訊處理的細節問題。視訊處理的低階特定細節修改相當簡易,可滿足編解碼器或硬體更改的要求,而不需要更改上層應用程式碼。這種做法省去對 DSP 進行程式設計的手續,能使開發團隊將大部分心力投入於應用本身的開發。此外,此種新做法也有助於以較低的成本使整合先進視訊功能的產品快速上市,同時降低未來產品維護與改進所需的時間和成本。
---本文作者為德州儀器DSP系統部門視訊系統應用工程師---