| 簡要說明 | |
|---|---|
|
檔案: |
|
|
預設平台: |
|
|
短說明 並列使用 JPEG_Encoder_Gray 運算子以提升 JPEG 壓縮的頻寬。 |
|
此範例旨在展示如何克服 JPEG_Encoder_Gray 用於 JPEG 壓縮時的頻寬限制。 為了達到此目的,多個運算子將以並列方式運作。針對 marathon mE5 VCL 平台提供了兩個範例。 JPEG_Gray 範例使用四個運算子並列編碼完整配置的灰階影像。 JPEG_Color 範例則使用六個運算子來編碼來自 Bayer 相機的影像,並對色度(Chroma)分量進行水平與垂直方向的降取樣(subsampling)。
此設計使用四個 JPEG_Encoder_Gray 運算子來編碼頻寬最高達 1200MP/s 的影像(這對於完整配置的 CameraLink 相機來說已足夠)。
JPEG串流基於長度編碼(runlength encoding)。每個串流以 DC 部分開頭,後接數個 AC 分量。
因此,為了將影像分割給多個編碼器,必須在各個間隔重新開始編碼。這可以在
JPEG 格式中使用重新啟動標記(restart marker)來完成。
因此,VisualApplets 設計將影像分割為八行一組的區塊(最小編碼單元(MCU)的一行)。
在每個 MCU 行的結尾會插入一個重新啟動標記。
在圖 276 中,您可以看到通用的 Applet。對於壓縮部分,有三個有趣的階層方塊(JPEGBlockSorter8x8、SplitImage 與 SYNC)。
在 JPEGBlockSorter8x8(圖 277)中,八行的資料被重新排列成 8x8 像素的區塊。這些區塊會連續發送。
為了保持影像便於處理,尺寸維持不變。
SplitImage(圖 279)將影像儲存至 DRAM,並重新排列各行,使得四個連續的行對應四個獨立的 MCU 區塊行。
透過這種方式,MCU 區塊行的串流可以被分割並發送至 4 個獨立的編碼器。
SYNC 收集已編碼的串流,將結尾處的資訊標籤替換為重新啟動標記,並將所有行附加到影像中。
首先將八個像素附加到一個「區塊像素」中。在排序方塊中,這些「區塊像素」的排列方式使得 每行的區塊像素依序相接,如圖 278 所示。
SplitImage(圖 279)方塊將來自 JPEGBlockSorter8x8(圖 277)的行重新排列為一種方案,
其中總是獨立傳輸四個區塊。每個區塊包含八行。此程序會重複進行,直到
傳輸完所有行。
在 Split 方塊中,影像被分割成四張影像。這是透過移除每個連結中不屬於該影像的所有行來完成的。
這些子影像被分割
為高度為八的影像,以便 Applet 可以在八行的結尾處插入重新啟動間隔。
SYNC 方塊將每個 JPEG_Converter 的串流組合成單一影像。這透過三個步驟完成。首先,將最後的位元組(0xFFD9 - 影像結尾標記 + 來自運算子的資訊)標記為待移除。 這是在 RemoveFillByte 方塊(圖 280)中完成的。 其次,在區塊之間加入重新啟動標記。JPEG 串流中的重新啟動標記結構為:「0xFFDx」, 其中 x 是從 0 到 7 輪流計算的值。這是在 RestartMarker 方塊(圖 277)中完成的。 第三,移除未使用的位元組。
對於由此 Applet 產生的影像資料,您需要在標頭中加入重新啟動資訊。 這可以透過在標頭中加入 DRI 標記(0xFF DD)來完成。
此範例與灰階範例基本上相同。不同之處在於:
1. 來自 Bayer 轉換的 RGB 資料會轉換為 YCrCb 色彩空間。
2. 對 Cr 和 Cb 分量進行次取樣。
3. 分離的影像會緩衝在獨立的緩衝區中。為了將行排序到六個轉換器而不插入虛擬行,需要一個獨立的排序緩衝區。
4. 需要將 Sync 分割為三個高度不同的不同影像。
為了在次取樣影像中使用重啟間隔,取樣係數需要調整為通道中 MCU 的最小數量。我們使用 4:2:0 次取樣。 這意味著 Cr 和 Cb 影像中的行寬僅有一半。這就是為什麼 Y 影像中的行也需要對半分割,以便將所有重啟標記放在同一個位置。

上一頁

