6.8 JPEG Encoder and Decoder
6.8.1 Introduction
JPEG Encoder는 JPEG-E-X Core와 JPEG Encoder Wrapper(JPGENCWRP)로 구성된다. 비슷하게 JPEG Decoder는 JPEG Decoder Core(JPEG-D-X)와 해당 Wrapper로 구성된다.
JPEG Core는 산업 표준 Baseline와 Extended ISO/IEC 10918-1 JPEG를 준수하며, i.MX 8DualXPlus Applications Processor Reference Manual(IMX8DQXPRM)에 몇 가지 제한 사항이 문서화되어 있다.
JPEG Encoder Wrapper(JPGENCWRP)는 Cast JPEG Encoder Core와 함께 작업에 사용되고, 구성 모드와 인코딩 모드가 있다.
- 구성 모드는 시스템 메모리에서 구성한 비트스트림을 가져와 인코더에 공급할 수 있다.
- 인코딩 모드는 AXI 버스 인터페이스를 통해 이미지 픽셀 데이터를 가져오고 인코딩하려고 Encoder Core에 공급할 수 있다.
비슷하게 JPEG Decoder Wrapper는 Cast JPEG Decoder Core에 대한 인터페이스를 제공한다.
JPEG Wrapper는 인코딩 디스크립터에 의한 컨텍스트 스위칭을 통해 다중 이미지 인코딩을 지원한다. 4개의 비트스트림 슬롯이 있다. 각각은 연결된 디스크립터에 의해 개별적으로 활성화될 수 있다.
JPEG Encoder/Decoder는 8K(0x2000) 픽셀의 최대 수평 해상도를 지원한다. 수평 해상도는 8의 배수여야 한다. 수직 해상도도 동일하다. YUV422와 YUV420의 경우 해상도는 16의 배수여야 한다. 이미지 크기는 최대 64K x 64K일 수 있다.
6.8.2 Overview of the JPEG Encoder and Decoder Driver
드라이버는 V4L2 프레임워크에 의존한다.
JPEG Encoder/Decoder 드라이브는 V4L2 프레임워크에서 노출된 IOCTL의 서브셋, 즉 다음의 v4l2_ioctl_ops를 구현한다 :
- VIDIOC_QUERYCAP
- VIDIOC_ENUM_FMT_VID_CAP
- VIDIOC_ENUM_FMT_VID_OUT
- VIDIOC_TRY_FMT_VID_CAP
- VIDIOC_TRY_FMT_VID_OUT
- VIDIOC_S_FMT_VID_CAP
- VIDIOC_S_FMT_VID_OUT
- VIDIOC_G_FMT_VID_CAP
- VIDIOC_G_FMT_VID_OUT
- VIDIOC_QBUF
- VIDIOC_DQBUF
- VIDIOC_CREATE_BUFS
- VIDIOC_PREPARE_BUF
- VIDIOC_REQBUFS
- VIDIOC_QUERYBUF
- VIDIOC_STREAMON
- VIDIOC_STREAMOFF
사용자 애플리케이션은 지원되는 V4L2 IOCTL을 통해 드라이버와 상호 작용할 수 있다.
JPEG 드라이버는 메모리 매핑을 통해 스트리밍 I/O를 지원한다. 이 기능은 VIDIOC_QUERYCAP가 사용될 때 V4L2_CAP_STREAMING 플래그를 통해 노출된다. 스트리밍은 애플리케이션과 드라이버 사이에 버퍼에 대한 포인터만 교환되고 데이터 자체는 복사되지 않는 I/O 메서드이다. 메모리 매핑은 주로 디바이스 메모리 버퍼를 애플리케이션 주소 영역으로 매핑하기 위한 것이다.
JPEG 드라이버는 single-planar API를 통해 메모리 매핑을 지원한다.
스트리밍 I/O에 대한 자세한 내용은 Streaming I/O (Memory Mapping)를 참조한다.
6.8.3 Limitations of the JPEG Encoder/Decoder Driver
하드웨어, 즉 JPEG Wrapper는 컨텍스트 스위칭을 통해 다중 이미지 인코딩을 지원한다. 드라이버에서 컨텍스트 스위칭을 사용하지 않으면, 사용가능한 4개의 슬롯 중 하나만 사용된다. 하드웨어는 비트스트림 버퍼 half/full을 지원하고 비트스트림 버퍼 관리를 위한 기능을 반환 하지만 드라이버는 이를 사용하지 않는다.
하드웨어는 YUV444, YUV420, YUV422, RGB, ARGB, Grey 형식을 지원한다.
드라이버는 다음 형식을 지원한다 : YUV444, YUV420 (NV12와 동일), YUV422 (YUYV나 YUV2와 동일), RGB (일부 제한), Grey. ARGB 형식은 지원되지 않는다.
드라이버는 gstreamer를 통한 JPEG 이미지 인코딩과 디코딩을 지원하지만, MJPEG 비디오는 아직 지원하지 않는다.
디코드된 이미지 해상도가 64x64보다 커야 한다는 하드웨어 제한이 있다.
디코드된 이미지에 최소한 기본 Huffman 테이블(DHT 마커 섹션은 jpeg 입력 스트림에 나타나야 함)이 있어야 한다는 하드웨어 제한이 있다.
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - System - Machine-Specific Layer (MSL) (0) | 2022.05.26 |
---|---|
i.MX Linux Reference Manual - System (0) | 2022.05.25 |
i.MX Linux Reference Manual - Video - Video Processing Unit (VPU) (0) | 2022.05.24 |
i.MX Linux Reference Manual - Video - Video Analog-to-Digital Converter (VADC) (0) | 2022.05.23 |
i.MX Linux Reference Manual - Video - Video for Linux 2 (V4L2) (0) | 2022.05.20 |