# JPEG decode

## Overview

JPEG decoding example project demonstrates how to decode a JPG file using either JPEG module or software jpeg library

## Board Setting

- Connect the **USB disk** to the development board ``usb0``, or insert the **SD memory card** into the development board ``SD card``
- Connect **LCD screen** to development board

## Configuration

- File `CMakeLists.txt`.
  - ``set (JPEG_USE_SDCARD 1)`` to read jpeg file (.jpg) from SD card or ``set (JPEG_USE_UDISK 1)`` to read jpeg file (.jpg) from u-disk. These options are exclusive.
  - ``set (JPEG_HW_MODE 1)`` to decode jpeg file with JPEG module; ``set (JPEG_HW_MODE 0)`` to decode with software library

## Supported picture formats

- Supports standard JPEG images：
  JPEG picture format components：SOI（File header）+APP0（Image identification information）+ DQT（Define quantification table）+ SOF0（Basic image information）+ DHT（Define Huffman table） + DRI（Define restart interval）+ SOS（Scan line start）+ EOI（End of document），the SOI is composed of two hexadecimal bytes (ffd8)。
- The sampling factor supported by the JPEG picture is：YUV420、YUV422H、YUV422V、YUV444、YUV400，Such as a JPG image in 800 * 400 YUV420 format，Through the worm EXIF viewer[Graphic insect EXIF viewer official website](https://exif.tuchong.com//)available：
    FileType	        JPEG
    FileTypeExtension	jpg
    MIMEType	        image/jpeg
    ImageWidth	        800
    ImageHeight	        480
    EncodingProcess	    Baseline DCT, Huffman coding
    BitsPerSample	    8
    ColorComponents	    3
    YCbCrSubSampling  **YCbCr4:2:0 (2 2)**

## Image size and resolution supported by this routine

- jpeg file size is expected to be less than 500KB, image resolution is expected to be less than 1024 * 768, defined in common/inc/file_op.h

## Running the example

- Configure storage in CMakeLists.txt
- Put jpeg files (with .jpg) into target storage
- Connect LCD pannel and storage to board
- Power on the board
- Download built elf into development board and run the demo
- If everything goes well, jpeg files stored in the target storage will be show on LCD pannel one by one.

