使用多個 JPEG_Encoder_Gray 運算子進行平行處理

簡短描述

檔案:
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\JPEG_Gray_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\JPEG_Color_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCL\Operator_JPEG_Encoder_Gray\Multi\Software
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\JPEG_Gray_CXP_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\JPEG_Color_CXP_Multi.vad
\examples\Processing\Compression\JPEG\mE5-MA-VCX-QP\Operator_JPEG_Encoder_Gray\Software

預設平台:
mE5-MA-VCL
mE5-MA-VCX-QP

簡短說明

使用 JPEG_Encoder_Gray 運算子以提升 JPEG 壓縮的頻寬。

此範例旨在說明 JPEG_Encoder_Gray 在 JPEG 壓縮時所面臨的頻寬限制。 為達成此目標,採用了多個並行運作的運算子。針對marathon mE5 VCL 平台,共有兩個範例。 JPEG_Gray 範例使用四個並行運作的運算子,來編碼一張完整配置的灰階影像。 JPEG_Color 範例則使用六個運算元,對來自拜耳相機的影像進行編碼,並針對色度成分在水平與垂直 方向進行子採樣。

JPEG Gray - VisualApplets Design

此設計使用四個 JPEG_Encoder_Gray 運算子,以最高 1200MP/s 的頻寬對影像進行編碼(這對於 全規格配置的 CameraLink 攝影機而言已綽綽有餘)。
JPEG 資料流基於運行長度編碼。每個資料流以DC 部分開頭,隨後跟隨多個 AC 組件。 因此,若要將影像分割給多個編碼器處理,則需在特定間隔重新啟動編碼。在 JPEG 格式中,可透過重新啟動標記來實現此功能。 因此,VisualApplets 設計將影像分割為八行一組的區塊(即一個最小編碼單位(MCU)的行數)。 在每條 MCU 行的結尾,都會插入一個重新啟動標記。

基本設計結構

圖 276. 基本設計結構


在圖276中,您可以看到該小程式的整體樣貌。在壓縮方面,有三個值得注意的分層方塊(JPEGBlockSorter8x8、 SplitImage 以及 SYNC)。 在 JPEGBlockSorter8x8(圖277)中,八行資料會被重新整理為 8x8 像素的區塊。這些區塊會依序傳送。
為了方便處理影像,其尺寸會保持不變。
SplitImage(圖279)將影像儲存至 DRAM,並重新排列行,使四條連續的行分別對應至四個獨立的 MCU 區塊行。 藉此方式,MCU 區塊行的資料流可被拆分,並傳送至 4 個獨立的編碼器。
SYNC 會彙整已編碼的資料流,將末尾的資訊標籤替換為重新開始標記,並將所有行串接成一張影像。

JPEGBlockSorter8x8 方塊內容

圖 277. 方塊JPEGBlockSorter8x8的內容


前八個像素會被彙整為一個「區塊像素」。在「排序框」中,這些「區塊像素」的排列方式是讓 每行中的區塊像素依序緊接在後,如圖278所示

在 JPEGBlockSorter8x8 中重新排列像素

圖 278. JPEGBlockSorter8x8 中的像素重新排列


該 SplitImage(圖279)方塊會重新排列來自 JPEGBlockSorter8x8(圖277)中的行重新排列成一種方案, 其中總是將四個區塊分開傳輸。每個區塊由八行組成。此程序會重複執行,直到 所有行皆已傳輸完畢。
在 Split 方塊中,影像會被分割成四張影像。此操作是透過移除各連結中不屬於該影像的所有行來實現。 這些子影像會被分割 為高度為八的影像,以便小程式能在八行結束處插入重啟間隔。

SplitImage 方塊的內容

圖 279.SplitImage方塊的內容


該 SYNC 方塊會將每個 JPEG_Converter 的資料流合併為一張影像。此過程分為三個步驟。首先,會標記最後的位元組(0xFFD9 — 影像結束標記 + 來自操作者的資訊)以供移除。 此步驟在 Box RemoveFillByte中完成(圖280)。 其次,在各區塊之間加入重啟標記。JPEG 串流中的重啟標記採用「0xFFDx」結構, 其中 x 為 0 至 7 之間的值,採用環形循環計數方式。此步驟在 Box RestartMarker方塊中執行(圖 277)。 第三,移除未使用的位元組。(圖277)中進行。 第三步:移除未使用字節。

「RemoveFillByte」方塊的內容

圖 280. 「RemoveFillByte」方塊的內容


「RestartMarker」方塊的內容

圖 281.RestartMarker方塊的內容


對於從此小程式取得影像資料時,您需要在標頭中加入重新啟動資訊。方法是將 DRI 標記 (0xFF DD) 加入標頭中。

JPEG Color - VisualApplets 設計

基本設計結構

圖 282. 基本設計結構


此範例基本上與灰色範例相同。差異如下:
1. 來自拜耳轉換的 RGB 資料被轉換為 YCrCb 色彩空間。
2. Cr 和 Cb 成分經過次採樣。
3. 分離後的影像被緩存於獨立的緩衝區中。 為了將行資料分流至六個轉換器,同時避免插入 虛線,需要一個獨立的分流緩衝區。
4. 同步訊號需要分割為三張高度各異的影像。

若要在子採樣影像中使用重新啟動間隔,則需將採樣因子調整為通道中 MCU 的最小數量 。我們採用 4:2:0 子採樣。 這表示 Cr 和 Cb 影像中的線寬僅為原來的二分之一。因此,為了讓所有重新啟動標記都位於相同位置, Y 影像中的線條也必須被分成兩半。