libjpeg-turbo Decoder

libjpeg-turbo is an LVGL interface to the libjpeg-turbo library — a JPEG image codec that uses SIMD instructions to accelerate baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm systems.

On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg, all else being equal.

For a detailed introduction, see: https://libjpeg-turbo.org .

Library source: https://github.com/libjpeg-turbo/libjpeg-turbo

Install

sudo apt install libjpeg-turbo8-dev

Adding libjpeg-turbo to Your Project

Cmake:

find_package(JPEG REQUIRED)
include_directories(${JPEG_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE ${JPEG_LIBRARIES})

Usage

Set LV_USE_LIBJPEG_TURBO in lv_conf.h to 1.

See the examples below.

It should be noted that each image decoded needs to consume:

image width × image height × 3

bytes of RAM, and it needs to be combined with the Image caching feature to ensure that the memory usage is within a reasonable range.

Example

Load a JPG image

#include "../../lv_examples.h"
#if LV_BUILD_EXAMPLES

#if LV_USE_LIBJPEG_TURBO

/**
 * Load a JPG image
 */
void lv_example_libjpeg_turbo_1(void)
{
    lv_obj_t * wp;

    wp = lv_image_create(lv_screen_active());
    /* Assuming a File system is attached to letter 'A'
     * E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
    lv_image_set_src(wp, "A:lvgl/examples/libs/libjpeg_turbo/flower.jpg");
    lv_obj_center(wp);
}

#else

void lv_example_libjpeg_turbo_1(void)
{
    lv_obj_t * label = lv_label_create(lv_screen_active());
    lv_label_set_text(label, "LibJPEG-Turbo is not installed");
    lv_obj_center(label);
}

#endif

#endif

API

lv_libjpeg_turbo.h

lv_libjpeg_turbo.h