What does this function do : res = d->info_cb(d, src, header); in lv_img_decoder.c

LVGL 8.3.10
Sorry to spam you with all these questions.
I am running Arduino IDE on a Arduino G1. And I am not able to display a simple small png file.
In order to trace the source of the problem I followed in the code what happens in this function lv_img_set_src(img1, “S:/Logo.png”); because somewhere it comes to a halt. So I placed a lot of LV_LOG_TRACE(“Now I know how far the code is running”); inside .c files. My code halts with these trace lines

11:13:37.301 -> [Trace]	(7.103, +0)	 lv_mem_alloc: ALLOC 3 	(in lv_mem.c line #169)
11:13:37.301 -> 
11:13:37.301 -> [Trace]	(7.103, +0)	 lv_mem_alloc: return alloc 	(in lv_mem.c line #172)

Now I have identified where it exactly goes wrong, in this peace of code which is in lv_img_decoder.c

lv_res_t lv_img_decoder_get_info(const void * src, lv_img_header_t * header)
{

LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` lv_img_decoder_get_info");   
LV_LOG_TRACE(src);
 
    lv_memset_00(header, sizeof(lv_img_header_t));

LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Step 2"); 

    if(src == NULL) return LV_RES_INV;

    lv_img_src_t src_type = lv_img_src_get_type(src);
    if(src_type == LV_IMG_SRC_VARIABLE) {

LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Step 2a"); 

        const lv_img_dsc_t * img_dsc = src;
        if(img_dsc->data == NULL) 
            { 
               LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Step 2b"); 
               return LV_RES_INV;
             }
    }

    lv_res_t res = LV_RES_INV;
    lv_img_decoder_t * d;
    _LV_LL_READ(&LV_GC_ROOT(_lv_img_decoder_ll), d) {
        if(d->info_cb) {

            LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Step 2c"); 
            res = d->info_cb(d, src, header);
            LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Step 2d");
            if(res == LV_RES_OK)
                 { 
                   LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` break;"); 
                   break;
                  }
        }
    }

LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` Einde"); 

    return res;
}

The code arrives at step 2c and then it halts somewhere in this call res = d->info_cb(d, src, header);

And now I am stuck because I can’t find a info_cb function anywhere in the lvgl library.
Btw, I read the png file from SD card, and according to the first bytes it should be a long file. It only has 365 bytes.

My settings in lv_conf.h are

#define LV_MEM_CUSTOM 0
#if LV_MEM_CUSTOM == 0
    /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
    //#define LV_MEM_SIZE (48U * 1024U)          /*[bytes]*/  //origineel
    #define LV_MEM_SIZE (128U * 1024U)          /*[bytes]*/
    /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/
    #define LV_MEM_ADR 0     /*0: unused*/
    /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/
    #if LV_MEM_ADR == 0
        #undef LV_MEM_POOL_INCLUDE
        #undef LV_MEM_POOL_ALLOC
    #endif

And

/*PNG decoder library*/
#define LV_USE_PNG 1```
Could someone help me out.

As far as I understand you use lv_png plugin to decode png-files. So you can find decoder content inside \src\extra\libs\png\lv_png.c.

void lv_png_init(void)
{
    lv_img_decoder_t * dec = lv_img_decoder_create();
    lv_img_decoder_set_info_cb(dec, decoder_info);
    lv_img_decoder_set_open_cb(dec, decoder_open);
    lv_img_decoder_set_close_cb(dec, decoder_close);
}

So info_cb function is decoder_info()
UPD: decoder_info() should be simple function - open file, read png header & detect size of image (W x H)

Thank you. To be honest, my lack of experience causes that I don’t fully understand your appreciated answer. But to be honest, we have abandons the idea of displaying png from sd card on arduino.