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 @@ ...@@ -47,6 +47,7 @@
#include <QPalette> #include <QPalette>
#include <QResizeEvent> #include <QResizeEvent>
#include <QDate> #include <QDate>
#include <QMutexLocker>
/********************************************************************** /**********************************************************************
* Video Widget. A simple frame on which video is drawn * 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 ) ...@@ -58,6 +59,7 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i )
/* Init */ /* Init */
vlc_mutex_init( &lock ); vlc_mutex_init( &lock );
p_vout = NULL; p_vout = NULL;
handleReady = false;
hide(); setMinimumSize( 16, 16 ); hide(); setMinimumSize( 16, 16 );
videoSize.rwidth() = -1; videoSize.rwidth() = -1;
videoSize.rheight() = -1; videoSize.rheight() = -1;
...@@ -80,6 +82,13 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i ) ...@@ -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 ) ); // CONNECT( this, askResize( int, int ), this, SetSizing( int, int ) );
} }
void VideoWidget::paintEvent(QPaintEvent *ev)
{
QFrame::paintEvent(ev);
handleReady = true;
handleWait.wakeAll();
}
VideoWidget::~VideoWidget() VideoWidget::~VideoWidget()
{ {
vlc_mutex_lock( &lock ); vlc_mutex_lock( &lock );
...@@ -106,6 +115,7 @@ VideoWidget::~VideoWidget() ...@@ -106,6 +115,7 @@ VideoWidget::~VideoWidget()
void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y, void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y,
unsigned int *pi_width, unsigned int *pi_height ) unsigned int *pi_width, unsigned int *pi_height )
{ {
QMutexLocker locker( &handleLock );
msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y ); msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y );
emit askVideoWidgetToShow(); emit askVideoWidgetToShow();
if( p_vout ) if( p_vout )
...@@ -114,7 +124,12 @@ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y, ...@@ -114,7 +124,12 @@ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y,
return NULL; return NULL;
} }
p_vout = p_nvout; 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(); return ( void* )winId();
} }
......
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
#include <QWidget> #include <QWidget>
#include <QFrame> #include <QFrame>
#include <QMutex>
#include <QWaitCondition>
#define VOLUME_MAX 200 #define VOLUME_MAX 200
...@@ -89,6 +91,9 @@ private: ...@@ -89,6 +91,9 @@ private:
vlc_mutex_t lock; vlc_mutex_t lock;
QSize videoSize; QSize videoSize;
QMutex handleLock;
QWaitCondition handleWait;
bool handleReady;
signals: signals:
void askVideoWidgetToShow(); void askVideoWidgetToShow();
...@@ -96,6 +101,9 @@ signals: ...@@ -96,6 +101,9 @@ signals:
public slots: public slots:
void SetSizing( unsigned int, unsigned int ); void SetSizing( unsigned int, unsigned int );
protected:
virtual void paintEvent(QPaintEvent *);
}; };
/******************** Background Widget ****************/ /******************** 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