병렬로 여러 JPEG_Encoder_Gray Operator 사용

간략한 설명

파일:
\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 operator를 병렬로 사용하여 JPEG 압축 대역폭을 향상합니다.

이 예제는 JPEG 압축 시 JPEG_Encoder_Gray의 대역폭 제한을 극복하는 방법을 보여주도록 설계되었습니다. 이를 위해 여러 operator가 병렬로 사용됩니다. marathon mE5 VCL 플랫폼용 예제가 두 가지 있습니다. JPEG_Gray 예제는 4개의 operator를 병렬로 사용하여 풀 컨피그레이션 흑백 이미지를 인코딩합니다. JPEG_Color 예제는 6개의 operator를 사용하여 크로마 성분에 대한 수평 및 수직 서브사플링이 적용된 베이어 카메라의 이미지를 인코딩합니다.

JPEG 그레이 - VisualApplets 디자인

이 디자인은 4개의 JPEG_Encoder_Gray operator를 사용하여 최대 1200MP/s 대역폭의 이미지를 인코딩합니다(이는 풀 컨피그레이션의 CameraLink 카메라에 충분함).
JPEG 스트림은 런길이 인코딩을 기반으로 합니다. 각 스트림은 DC 파트로 시작하고 여러 AC 성분이 그 뒤를 따릅니다. 따라서 이미지를 여러 인코더로 분할하려면 간격에 맞춰 인코딩을 다시 시작해야 합니다. 이는 JPEG 형식에서 재시작 마커를 사용하여 수행할 수 있습니다. 따라서 VisualApplets 디자인에서는 이미지를 8라인 블록(최소 부호화 단위(MCU)의 1라인)으로 분할합니다. 각 MCU 라인의 끝에는 재시작 마커가 삽입됩니다.

기본 디자인 구조

그림 276. 기본 디자인 구조


그림 276에서 일반적인 앱릿을 확인할 수 있습니다. 압축과 관련된 세 가지 흥미로운 계층형 상자(JPEGBlockSorter8x8, SplitImage, SYNC)가 있습니다. JPEGBlockSorter8x8(그림 277)에서는 8라인의 데이터가 8x8 픽셀 블록으로 재정렬됩니다. 이 블록들은 연속해서 전송됩니다.
이미지를 관리하기 쉽게 유지하기 위해 치수는 동일하게 유지됩니다.
SplitImage(그림 279)는 이미지를 DRAM에 저장하고, 4개의 연속된 라인이 4개의 독립된 MCU 블록 라인을 주소 지정하도록 라인을 재정렬합니다. 이러한 방식으로 MCU 블록 라인 스트림을 분할하여 4개의 독립된 인코더로 전송할 수 있습니다.
SYNC는 인코딩된 스트림을 수집하고, 끝부분의 정보 태그를 재시작 마커로 교체하며, 모든 라인을 하나의 이미지에 추가합니다.

JPEGBlockSorter8x8 상자 내용

그림 277. JPEGBlockSorter8x8 상자 내용


먼저 8개의 픽셀이 하나의 "블록 픽셀"로 추가됩니다. 정렬 상자에서 이러한 "블록 픽셀"은 그림 278과 같이 각 라인의 블록 픽셀이 차례로 오도록 배치됩니다.

JPEGBlockSorter8x8에서의 픽셀 재정렬

그림 278. JPEGBlockSorter8x8에서의 픽셀 재정렬


SplitImage(그림 279) 상자는 JPEGBlockSorter8x8(그림 277)의 라인을 항상 4개의 블록이 개별적으로 전송되는 체계로 재정렬합니다. 각 블록은 8개의 라인으로 구성됩니다. 이 절차는 모든 라인이 전송될 때까지 반복됩니다.
Split 상자에서 이미지는 4개의 이미지로 분할됩니다. 이는 이미지에 속하지 않는 각 링크의 모든 라인을 제거하여 수행됩니다. 이 하위 이미지들은 높이가 8인 이미지로 분할되어, 앱릿이 8라인의 끝에 재시작 간격을 삽입할 수 있도록 합니다.

SplitImage 상자 내용

그림 279. SplitImage 상자 내용


SYNC 상자는 각 JPEG_Converter의 스트림을 하나의 이미지로 결합합니다. 이는 세 단계로 수행됩니다. 먼저 최종 바이트(0xFFD9 - 이미지의 끝 마커 + operator의 정보)가 제거 대상으로 표시됩니다. 이는 RemoveFillByte 상자(그림 280)에서 수행됩니다. 둘째, 블록 사이에 재시작 마커가 추가됩니다. JPEG 스트림의 재시작 마커는 "0xFFDx" 구조를 가지며, 여기서 x는 라운드 로빈 방식으로 0부터 7까지 카운트되는 값입니다. 이는 RestartMarker 상자(그림 277)에서 수행됩니다. 셋째, 사용되지 않는 바이트가 제거됩니다.

RemoveFillByte 상자 내용

그림 280. RemoveFillByte 상자 내용


RestartMarker 상자 내용

그림 281. RestartMarker 상자 내용


이 앱릿에서 얻은 이미지 데이터의 경우 헤더에 재시작 정보를 추가해야 합니다. 이는 헤더에 DRI 마커(0xFF DD)를 추가하여 수행됩니다.

JPEG 컬러 - VisualApplets 디자인

기본 디자인 구조

그림 282. 기본 설계 구조


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

서브샘플링된 이미지에서 재시작 간격(restart interval)을 사용하려면 샘플링 팩터를 채널의 최소 MCU 수에 맞게 조정해야 합니다. 4:2:0 서브샘플링을 사용합니다. 즉, Cr 및 Cb 이미지에서는 라인 너비가 절반에 불과합니다. 그렇기 때문에 모든 재시작 마커를 같은 위치에 지정하려면 Y 이미지에서도 라인을 절반으로 분할해야 합니다.