Changeset 8c6064c922a385a981ed1e9140ba676047e93363

Show
Ignore:
Timestamp:
25/06/08 20:39:16 (4 months ago)
Author:
Rémi Denis-Courmont <rdenis@simphalempin.com>
git-committer:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1214419156 +0300
git-parent:

[cdad38197173431b485f22583ef0ceb692dca45c]

git-author:
Rémi Denis-Courmont <rdenis@simphalempin.com> 1214419103 +0300
Message:

Qt4 window: use a proper condition variable instead of msleep()

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/gui/qt4/main_interface.cpp

    rcdad381 r8c6064c  
    438438        videoWidget = new VideoWidget( p_intf ); 
    439439        mainLayout->insertWidget( 0, videoWidget, 10 ); 
    440  
    441         var_Create( p_intf, "window_widget", VLC_VAR_ADDRESS ); 
    442         vlc_value_t val; 
    443         val.p_address = this; 
    444         var_Set( p_intf, "window_widget", val ); 
    445440    } 
    446441 
  • modules/gui/qt4/qt4.cpp

    r0697029 r8c6064c  
    3030#include <QTranslator> 
    3131#include <QDate> 
     32#include <QMutex> 
     33#include <QMutexLocker> 
     34#include <QWaitCondition> 
    3235 
    3336#include "qt4.hpp" 
     
    242245    p_intf->p_sys->p_sub = msg_Subscribe( p_intf ); 
    243246 
     247    var_Create( p_this, "window_widget", VLC_VAR_ADDRESS ); 
    244248    return VLC_SUCCESS; 
    245249} 
     
    292296} 
    293297 
     298static QMutex windowLock; 
     299static QWaitCondition windowWait; 
     300 
    294301static void Init( intf_thread_t *p_intf ) 
    295302{ 
     303    vlc_value_t val; 
    296304    char dummy[] = ""; 
    297305    char *argv[] = { dummy }; 
     
    332340        p_mi->show(); */ 
    333341        p_intf->p_sys->b_isDialogProvider = false; 
     342 
     343        val.p_address = p_intf->p_sys->p_mi; 
     344        QMutexLocker locker (&windowLock); 
     345        var_Set (p_intf, "window_widget", val); 
     346        windowWait.wakeAll (); 
    334347    } 
    335348    else 
     
    390403    /* And quit */ 
    391404 
     405    QMutexLocker locker (&windowLock); 
     406    val.p_address = NULL; 
     407    var_Set (p_intf, "window_widget", val); 
    392408    /* Destroy first the main interface because it is connected to some slots 
    393409       in the MainInputManager */ 
     
    456472    var_Create (intf, "window_widget", VLC_VAR_ADDRESS); 
    457473 
    458     vlc_value_t lockval, ptrval; 
    459     var_Get (intf, "window_mutex", &lockval); 
    460  
    461     vlc_mutex_lock ((vlc_mutex_t *)lockval.p_address); 
     474    vlc_value_t ptrval; 
     475 
     476    windowLock.lock (); 
    462477    msg_Dbg (obj, "waiting for interface..."); 
    463     do 
     478    for (;;) 
    464479    { 
    465480        var_Get (intf, "window_widget", &ptrval); 
    466         /* FIXME A condition variable would be way more appropriate. */ 
    467         msleep (INTF_IDLE_SLEEP)
    468     } while (ptrval.p_address == NULL); 
    469  
    470     msg_Dbg (obj, "requestiong window..."); 
     481        if (ptrval.p_address != NULL) 
     482            break
     483        windowWait.wait (&windowLock); 
     484    } 
     485 
    471486    MainInterface *mi = (MainInterface *)ptrval.p_address; 
     487    msg_Dbg (obj, "requesting window (%p)...", mi); 
    472488 
    473489    wnd->handle = mi->requestVideo (wnd->vout, &wnd->pos_x, &wnd->pos_y, 
    474490                                    &wnd->width, &wnd->height); 
    475     vlc_mutex_unlock ((vlc_mutex_t *)lockval.p_address); 
     491    windowLock.unlock (); 
    476492    wnd->control = ControlWindow; 
    477493    wnd->p_private = intf;