여러 개의 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 의 대역폭 제한을 어떻게 극복할 수 있는지 보여주기 위해 고안되었습니다. 이를 달성하기 위해 여러 연산자를 병렬로 사용합니다. marathon mE5 VCL 플랫폼용 예제가 두 개 있습니다. JPEG_Gray 예제는 네 개의 연산자를 병렬로 사용하여 전체 구성의 그레이스케일 이미지를 인코딩합니다. JPEG_Color 예제는 6개의 연산자를 사용하여 베이어 카메라에서 촬영한 이미지를 인코딩하며, 이 때 색차(Chroma) 성분에 대해 수평 및 수직 방향으로 서브샘플링을 적용합니다.

JPEG Gray - VisualApplets Design

이 설계는 4개의 JPEG_Encoder_Gray 연산자를 사용하여 최대 1200MP/s의 대역폭으로 이미지를 인코딩합니다(이는 풀 사양의 CameraLink 카메라에 충분한 수준입니다).
JPEG 스트림은 런길이 인코딩을 기반으로 합니다. 각 스트림은 DC 부분으로 시작되며, 그 뒤에 여러 AC 구성 요소가 이어집니다. 따라서 이미지를 여러 인코더로 분할하려면 일정한 간격으로 인코딩을 재개해야 합니다. 이는 JPEG 형식에서 재개 마커를 사용하여 수행할 수 있습니다. 이에 따라 VisualApplets 설계는 이미지를 8줄(최소 코딩 단위(MCU) 1줄) 단위의 블록으로 분할합니다. 각 MCU 줄의 끝에는 재개 마커가 삽입됩니다.

기본 설계 구조

그림 276. 기본 설계 구조


그림 276에서는 일반적인 애플릿을 볼 수 있습니다. 압축과 관련하여 주목할 만한 세 개의 계층적 상자가 있습니다 (JPEGBlockSorter8x8, SplitImage , SYNC). In JPEGBlockSorter8x8(그림 277)에서는 8줄의 데이터를 8x8 픽셀 크기의 블록으로 재구성합니다. 이 블록들은 연속적으로 전송됩니다.
이미지를 쉽게 다룰 수 있도록 크기는 동일하게 유지됩니다.
SplitImage(그림 279)는 이미지를 DRAM에 저장하고, 4개의 연속된 라인이 4개의 독립적인 MCU 블록 라인을 참조하도록 라인을 재구성합니다. 이러한 방식으로 MCU 블록 라인 스트림을 분할하여 4개의 독립적인 인코더로 전송할 수 있습니다.
SYNC 는 인코딩된 스트림을 수집하고, 끝부분의 정보 태그를 재개 마커로 대체한 후 모든 라인을 하나의 이미지로 결합합니다.

JPEGBlockSorter8x8 상자 내용물

그림 277. JPEGBlockSorter8x8 상자의 내용


처음 8개의 픽셀이 하나의 “블록 픽셀”로 묶입니다. 정렬 상자에서는 이러한 “블록 픽셀”이 그림 278에 표시된 것처럼 각 행의 블록 픽셀이 차례로 이어지도록 배열됩니다.

JPEGBlockSorter8x8에서 픽셀 재배열

그림 278. JPEGBlockSorter8x8에서 픽셀 재배열


The SplitImage(그림 279) 상자는 JPEGBlockSorter8x8(그림 277)에서 나온 라인들을 재구성하여, 항상 4개의 블록이 별도로 전송되도록 합니다. 각 블록은 8개의 라인으로 구성됩니다. 이 과정은 모든 라인이 전송될 때까지 반복됩니다.
Split 상자에서는 이미지를 네 개의 이미지로 분할합니다. 이는 각 링크에서 해당 이미지에 속하지 않는 모든 라인을 제거함으로써 이루어집니다. 이러한 하위 이미지들은 높이가 8인 이미지로 분할되어, 애플릿이 8개의 라인 끝마다 재시작 간격을 삽입할 수 있도록 합니다.

SplitImage 상자의 내용

그림 279. SplitImage 상자의 내용


The SYNC 박스(box)는 각 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 Design

기본 설계 구조

그림 282. 기본 설계 구조


이 예제는 기본적으로 회색 예제와 동일합니다. 차이점은 다음과 같습니다.
1. 베이어 변환을 통해 얻은 RGB 데이터가 YCrCb 색 공간으로 변환됩니다.
2. Cr 및 Cb 성분이 서브샘플링됩니다.
3. 분리된 이미지는 별도의 버퍼에 저장됩니다. 더미 라인을 삽입하지 않고 6개의 변환기로 라인을 정렬하기 위해서는 독립적인 정렬 버퍼가 필요합니다.
4. 동기 신호를 높이가 서로 다른 세 개의 이미지로 분할해야 합니다.

서브샘플링된 이미지에서 재시작 간격을 사용하려면 샘플링 계수를 채널당 최소 MCU 수로 조정해야 합니다. 우리는 4:2:0 서브샘플링을 사용합니다. 이는 Cr 및 Cb 이미지의 라인 폭이 절반에 불과함을 의미합니다. 따라서 모든 재시작 마커를 동일한 위치에 배치하기 위해서는 Y 이미지에서도 라인을 반으로 분할해야 합니다.