Commit aeb8ed0f authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Qt4: wait for VideoWidget::paintEvent

This seems to solve the invalid handle problem, as pointed out by
Laurent. However, I get a poststamp-sized video output now...
parent 5c603c04
......@@ -47,6 +47,7 @@
#include <QPalette>
#include <QResizeEvent>
#include <QDate>
#include <QMutexLocker>
/**********************************************************************
* Video Widget. A simple frame on which video is drawn
......@@ -58,6 +59,7 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i )
/* Init */
vlc_mutex_init( &lock );
p_vout = NULL;
handleReady = false;
hide(); setMinimumSize( 16, 16 );
videoSize.rwidth() = -1;
videoSize.rheight() = -1;
......@@ -80,6 +82,13 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i )
// CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) );
}
void VideoWidget::paintEvent(QPaintEvent *ev)
{
QFrame::paintEvent(ev);
handleReady = true;
handleWait.wakeAll();
}
VideoWidget::~VideoWidget()
{
vlc_mutex_lock( &lock );
......@@ -106,6 +115,7 @@ VideoWidget::~VideoWidget()
void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y,
unsigned int *pi_width, unsigned int *pi_height )
{
QMutexLocker locker( &handleLock );
msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y );
emit askVideoWidgetToShow();
if( p_vout )
......@@ -114,7 +124,12 @@ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y,
return NULL;
}
p_vout = p_nvout;
msg_Dbg( p_intf, "embedded video handle %p", winId() );
while( !handleReady )
{
msg_Dbg( p_intf, "embedded video pending (handle %p)", winId() );
handleWait.wait( &handleLock );
}
msg_Dbg( p_intf, "embedded video ready (handle %p)", winId() );
return ( void* )winId();
}
......
......@@ -40,6 +40,8 @@
#include <QWidget>
#include <QFrame>
#include <QMutex>
#include <QWaitCondition>
#define VOLUME_MAX 200
......@@ -89,6 +91,9 @@ private:
vlc_mutex_t lock;
QSize videoSize;
QMutex handleLock;
QWaitCondition handleWait;
bool handleReady;
signals:
void askVideoWidgetToShow();
......@@ -96,6 +101,9 @@ signals:
public slots:
void SetSizing( unsigned int, unsigned int );
protected:
virtual void paintEvent(QPaintEvent *);
};
/******************** Background Widget ****************/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment