void MissionControl::setRegistry(MafwRegistryAdapter *mafwRegistry)
{
    this->mafwRegistry = mafwRegistry;
    mafwRenderer = mafwRegistry->renderer();

    m_metadataWatcher = new MetadataWatcher(mafwRegistry);

    connect(m_metadataWatcher, SIGNAL(metadataReady()), this, SLOT(onMetadataReady()));
    connect(m_metadataWatcher, SIGNAL(metadataChanged(QString,QVariant)), this, SLOT(onMetadataChanged(QString,QVariant)));
    connect(mafwRenderer, SIGNAL(mediaChanged(int,char*)), this, SLOT(onMediaChanged()));

    connect(mafwRenderer, SIGNAL(rendererReady()), mafwRenderer, SLOT(getStatus()));
    connect(mafwRenderer, SIGNAL(signalGetStatus(MafwPlaylist*,uint,MafwPlayState,const char*,QString)),
            this, SLOT(onStatusReceived(MafwPlaylist*,uint,MafwPlayState,const char*,QString)));

    QDBusConnection::systemBus().connect("", "", "org.bluez.AudioSink", "Connected",
                                         this, SLOT(onWirelessHeadsetConnected()));
    QDBusConnection::systemBus().connect("", "", "org.bluez.AudioSink", "Disconnected",
                                         this, SLOT(onHeadsetDisconnected()));
    QDBusConnection::systemBus().connect("", "", "org.bluez.Headset", "Connected",
                                         this, SLOT(onWirelessHeadsetConnected()));
    QDBusConnection::systemBus().connect("", "", "org.bluez.Headset", "Disconnected",
                                         this, SLOT(onHeadsetDisconnected()));

    QDBusConnection::systemBus().connect("", "/org/freedesktop/Hal/devices/platform_headphone", "org.freedesktop.Hal.Device", "PropertyModified",
                                         this, SLOT(updateWiredHeadset()));

    QDBusConnection::systemBus().connect("", "", "org.freedesktop.Hal.Device", "Condition",
                                         this, SLOT(onHeadsetButtonPressed(QDBusMessage)));

    QDBusConnection::systemBus().connect("", "", "com.nokia.mce.signal", "sig_call_state_ind",
                                         this, SLOT(onCallStateChanged(QDBusMessage)));

    updateWiredHeadset();
}
void RenderThread::renderNextFrame(float dt)
{
    m_context->makeCurrent(m_fakeSurface);

    //m_elapsed_time = m_elapsed_timer->nsecsElapsed();
    //m_elapsed_timer->restart();

    if(m_size_new_flag) {
        m_mutex.lock();
        m_size.setWidth(m_size_new.width());
        m_size.setHeight(m_size_new.height());
        if(m_renderer)
            m_renderer->changeSize(m_size.width(), m_size.height());
        m_size_new_flag = false;
        m_mutex.unlock();

        if(m_displayFbo) {
            delete m_displayFbo;
            m_displayFbo = 0;
        }

        if(m_renderFbo) {
            delete m_renderFbo;
            m_renderFbo = 0;
        }
    }

    if (!m_renderFbo) {

        if(!m_initialization_done) {
            GLuint e = glewInit();
            m_format.setAttachment(QOpenGLFramebufferObject::Depth);

            m_renderer = new Renderer();
            m_renderer->initialize(m_size.width(), m_size.height());
            emit rendererReady(m_renderer->getRendererData());

            m_initialization_done = true;
        }

        // Initialize the buffers and renderer
        m_displayFbo = new QOpenGLFramebufferObject(m_size, m_format);
        m_renderFbo = new QOpenGLFramebufferObject(m_size, m_format);

        m_renderer->setScreenBuffer_h(m_renderFbo->handle());
    }

    m_renderer->render(dt);

    // We need to flush the contents to the FBO before posting
    // the texture to the other thread, otherwise, we might
    // get unexpected results.


    qSwap(m_renderFbo, m_displayFbo);
    m_renderer->setScreenBuffer_h(m_displayFbo->handle());
    emit newDisplayTextureReady(m_displayFbo->texture(), m_size);
}
void RenderThread::setFlag(DataManager::FlagType type, bool value) {
    switch(type) {
    case DataManager::SSAO_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSsaoState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SSAO_RENDER_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSsaoRenderState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SSAO_VERTICAL_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSsaoRenderVState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SSAO_HORIZONTAL_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSsaoRenderVHState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SCENE_RENDER_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSceneRenderState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SCENE_NORMAL_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSceneNormalState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::SCENE_DEPTH_TOOGLE : {
        //qDebug() <<value;
        m_renderer->getRendererData().setSceneDepthState(value);
        m_renderer->getRendererData().setRenderMode(type);
        break;
    }
    case DataManager::RESTORE_DEFAULTS : {
        //qDebug() <<value;
        m_renderer->restoreRenderDataDefaults();
        emit rendererReady(m_renderer->getRendererData());
        break;
    }
    }
}