Changeset 8c6064c922a385a981ed1e9140ba676047e93363
- 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
| rcdad381 |
r8c6064c |
|
| 438 | 438 | videoWidget = new VideoWidget( p_intf ); |
|---|
| 439 | 439 | 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 ); |
|---|
| 445 | 440 | } |
|---|
| 446 | 441 | |
|---|
| r0697029 |
r8c6064c |
|
| 30 | 30 | #include <QTranslator> |
|---|
| 31 | 31 | #include <QDate> |
|---|
| | 32 | #include <QMutex> |
|---|
| | 33 | #include <QMutexLocker> |
|---|
| | 34 | #include <QWaitCondition> |
|---|
| 32 | 35 | |
|---|
| 33 | 36 | #include "qt4.hpp" |
|---|
| … | … | |
| 242 | 245 | p_intf->p_sys->p_sub = msg_Subscribe( p_intf ); |
|---|
| 243 | 246 | |
|---|
| | 247 | var_Create( p_this, "window_widget", VLC_VAR_ADDRESS ); |
|---|
| 244 | 248 | return VLC_SUCCESS; |
|---|
| 245 | 249 | } |
|---|
| … | … | |
| 292 | 296 | } |
|---|
| 293 | 297 | |
|---|
| | 298 | static QMutex windowLock; |
|---|
| | 299 | static QWaitCondition windowWait; |
|---|
| | 300 | |
|---|
| 294 | 301 | static void Init( intf_thread_t *p_intf ) |
|---|
| 295 | 302 | { |
|---|
| | 303 | vlc_value_t val; |
|---|
| 296 | 304 | char dummy[] = ""; |
|---|
| 297 | 305 | char *argv[] = { dummy }; |
|---|
| … | … | |
| 332 | 340 | p_mi->show(); */ |
|---|
| 333 | 341 | 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 (); |
|---|
| 334 | 347 | } |
|---|
| 335 | 348 | else |
|---|
| … | … | |
| 390 | 403 | /* And quit */ |
|---|
| 391 | 404 | |
|---|
| | 405 | QMutexLocker locker (&windowLock); |
|---|
| | 406 | val.p_address = NULL; |
|---|
| | 407 | var_Set (p_intf, "window_widget", val); |
|---|
| 392 | 408 | /* Destroy first the main interface because it is connected to some slots |
|---|
| 393 | 409 | in the MainInputManager */ |
|---|
| … | … | |
| 456 | 472 | var_Create (intf, "window_widget", VLC_VAR_ADDRESS); |
|---|
| 457 | 473 | |
|---|
| 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 (); |
|---|
| 462 | 477 | msg_Dbg (obj, "waiting for interface..."); |
|---|
| 463 | | do |
|---|
| | 478 | for (;;) |
|---|
| 464 | 479 | { |
|---|
| 465 | 480 | 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 | |
|---|
| 471 | 486 | MainInterface *mi = (MainInterface *)ptrval.p_address; |
|---|
| | 487 | msg_Dbg (obj, "requesting window (%p)...", mi); |
|---|
| 472 | 488 | |
|---|
| 473 | 489 | wnd->handle = mi->requestVideo (wnd->vout, &wnd->pos_x, &wnd->pos_y, |
|---|
| 474 | 490 | &wnd->width, &wnd->height); |
|---|
| 475 | | vlc_mutex_unlock ((vlc_mutex_t *)lockval.p_address); |
|---|
| | 491 | windowLock.unlock (); |
|---|
| 476 | 492 | wnd->control = ControlWindow; |
|---|
| 477 | 493 | wnd->p_private = intf; |
|---|