Добрый день.
Я новичок в Qt и столкнулся со следующей проблемой. Пытаюсь я написать проигрыватель видео файлов. Приложение содержит главное окно (наследник QWidget), в котором создан QGridLayout с несколькими GLWidget. При наличии только одного GLWidget все работает отлично, проигрывание видео плавное. Но если добавить еще хотя бы один, то начинаются рывки в видео. Выглядит это так, как будто видео фреймы переставляются местами.
Код довольно простой. Есть некий код обработки видео, который при наличии видео кадра дергает метод у GLWidget:
void GLWidget::setImage(AVFrame* frame)
{
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        m_frames.push_back(std::shared_ptr<AVFRame>(frame, av_free));
    }
    update();
}
И довольно простой код отрисовки (код инициализации openGL опущен):
void GLWidget::paintGL()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    std::shared_ptr<AVFRame> frame;
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        if (!m_frames.empty())
        {
            frame = m_frames.front();
            frames.pop_front();
        }
    }
    if (0 != frame.get())
    {
        glBindTexture(GL_TEXTURE_2D, ytex);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width, frame->height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[0]);
        glBindTexture(GL_TEXTURE_2D, utex);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width / 2, frame->height / 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[1]);
        glBindTexture(GL_TEXTURE_2D, vtex);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width / 2, frame->height / 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[2]);
        
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
    }
}
Подскажите пожалуйста, что может быть причиной рывков?