===========
JPG decoder
===========

Allow the use of JPG images in LVGL. Besides that it also allows the use
of a custom format, called Split JPG (SJPG), which can be decoded in
more optimal way on embedded systems.

Overview
--------

-  Supports both normal JPG and the custom SJPG formats.
-  Decoding normal JPG consumes RAM with the size of the whole
   uncompressed image (recommended only for devices with more RAM)
-  SJPG is a custom format based on "normal" JPG and specially made for
   LVGL.
-  SJPG is 'split-jpeg' which is a bundle of small jpeg fragments with
   an sjpg header.
-  SJPG size will be almost comparable to the jpg file or might be a
   slightly larger.
-  File read from file and c-array are implemented.
-  SJPEG frame fragment cache enables fast fetching of lines if
   available in cache.
-  By default the sjpg image cache will be image width \* 2 \* 16 bytes
   (can be modified)
-  Currently only 16 bit image format is supported (TODO)
-  Only the required portion of the JPG and SJPG images are decoded,
   therefore they can't be zoomed or rotated.

Usage
-----

If enabled in ``lv_conf.h`` by :c:macro:`LV_USE_SJPG` LVGL will register a new
image decoder automatically so JPG and SJPG files can be directly used
as image sources. For example:

.. code:: c

   lv_img_set_src(my_img, "S:path/to/picture.jpg");

Note that, a file system driver needs to registered to open images from
files. Read more about it :ref:`file-system` or just
enable one in ``lv_conf.h`` with ``LV_USE_FS_...``

Converter
---------

Converting JPG to C array
~~~~~~~~~~~~~~~~~~~~~~~~~

-  Use lvgl online tool https://lvgl.io/tools/imageconverter
-  Color format = RAW, output format = C Array

Converting JPG to SJPG
~~~~~~~~~~~~~~~~~~~~~~

python3 and the PIL library required. (PIL can be installed with ``pip3 install pillow``)

To create SJPG from JPG: - Copy the image to convert into
``lvgl/scripts`` - ``cd lvgl/scripts`` -
``python3 jpg_to_sjpg.py image_to_convert.jpg``. It creates both a C
files and an SJPG image.

The expected result is:

.. code:: sh

   Conversion started...

   Input:
           image_to_convert.jpg
           RES = 640 x 480

   Output:
           Time taken = 1.66 sec
           bin size = 77.1 KB
           walpaper.sjpg           (bin file)
           walpaper.c              (c array)

   All good!


Example
-------

.. include:: ../examples/libs/sjpg/index.rst


API
---

:ref:`lv_sjpg`

:ref:`tjpgd`

:ref:`tjpgdcnf`
