Touch coordinates average error

Hello! I use ili9341 and XPT2046 touchscreen display with esp32 in platformio with esp-idf. LVGL 8.1.
if i touch some known point i have a log
[0;32mI (341879) XPT2046: x = 61, y = 78␛[0m
␛[0;32mI (341914) XPT2046: x = 121, y = 156␛[0m
␛[0;32mI (341948) XPT2046: x = 121, y = 156␛[0m
␛[0;32mI (341983) XPT2046: x = 121, y = 156␛[0m
␛[0;32mI (342017) XPT2046: x = 121, y = 156␛[0m
␛[0;32mI (342051) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342085) XPT2046: x = 60, y = 77␛[0m
␛[0;32mI (342119) XPT2046: x = 60, y = 77␛[0m
␛[0;32mI (342154) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342188) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342223) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342257) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342291) XPT2046: x = 121, y = 155␛[0m
␛[0;32mI (342325) XPT2046: x = 60, y = 77␛[0m
␛[0;32mI (342359) XPT2046: x = 60, y = 77␛[0m

Coordinates changes to half of original ? I use LVGL default drivers functions

  lv_indev_drv_init(&indev_drv);
    indev_drv.type = LV_INDEV_TYPE_POINTER;
    indev_drv.read_cb = touch_driver_read;
    lv_indev_drv_register(&indev_drv);

bool xpt2046_read(lv_indev_drv_t * drv, lv_indev_data_t * data)
{
    static int16_t last_x = 0;
    static int16_t last_y = 0;
    bool valid = false;

    int16_t x = last_x;
    int16_t y = last_y;
    if (xpt2048_is_touch_detected() == TOUCH_DETECTED)
    {
        x = xpt2046_cmd(CMD_X_READ);
        y = xpt2046_cmd(CMD_Y_READ);
        //ESP_LOGI(TAG, "P(%d,%d)", x, y);
        x = x >> 4;
        y = y >> 4;
        //ESP_LOGI(TAG, "P_norm(%d,%d)", x, y);
        xpt2046_corr(&x, &y);
        xpt2046_avg(&x, &y);
        last_x = x;
        last_y = y;
        ESP_LOGI(TAG, "x = %d, y = %d", x, y);
        valid = true;
    }
    else
    {
        avg_last = 0;
    }
    data->point.x = x;
    data->point.y = y;
    data->state = (valid == false ? LV_INDEV_STATE_REL : LV_INDEV_STATE_PR);
    return false;
}

if average xpt2046_avg(&x, &y); not commented coordinates are wrong and i have a lot of touch ing mistakes

if average xpt2046_avg(&x, &y); commented it is working bad video

i solved the problem like this:

bool xpt2046_read(lv_indev_drv_t * drv, lv_indev_data_t * data)
{

    static int16_t last_x = 0;

    static int16_t last_y = 0;

    bool valid = false;

    int16_t x = last_y;

    int16_t y = last_y;

    if (xpt2048_is_touch_detected() == TOUCH_DETECTED)

    {

        while(1)

        {

            x = xpt2046_cmd(CMD_X_READ);

            y = xpt2046_cmd(CMD_Y_READ);

            //ESP_LOGI(TAG, "P(%d,%d)", x, y);

            x = x >> 4;

            y = y >> 4;

            //ESP_LOGI(TAG, "P_norm(%d,%d)", x, y);

            xpt2046_corr(&x, &y);

            if(x>0 && y>0) break;

        }

        xpt2046_avg(&x, &y);

        ESP_LOGI(TAG, "x = %d, y = %d", x, y);

        last_x = x;

        last_y = y;

        valid = true;

    }

    else

    {

        avg_last = 0;

    }  

    data->point.x = x;

    data->point.y = y;

    data->state = (valid == false ? LV_INDEV_STATE_REL : LV_INDEV_STATE_PR);

    return false;

}

may be its incorrect, but works