mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-04 09:11:33 +02:00
Fixed Qt Embedded video output placing of video stream in window. Also fixed additional spacing between video lines.
This commit is contained in:
parent
56b7cbf190
commit
3d72a0550a
@ -2,7 +2,7 @@
|
||||
* qte.cpp : QT Embedded plugin for vlc
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1998-2002 VideoLAN
|
||||
* $Id: qte.cpp,v 1.10 2003/02/02 00:46:58 sam Exp $
|
||||
* $Id: qte.cpp,v 1.11 2003/02/12 23:09:23 jpsaman Exp $
|
||||
*
|
||||
* Authors: Gerald Hansink <gerald.hansink@ordain.nl>
|
||||
* Jean-Paul Saman <jpsaman@wxs.nl>
|
||||
@ -105,8 +105,8 @@ static int Manage ( vout_thread_t * );
|
||||
static int Init ( vout_thread_t * );
|
||||
static void End ( vout_thread_t * );
|
||||
|
||||
static int CreateQtWindow ( vout_thread_t * );
|
||||
static void DestroyQtWindow( vout_thread_t * );
|
||||
static int OpenDisplay ( vout_thread_t * );
|
||||
static void CloseDisplay( vout_thread_t * );
|
||||
|
||||
static int NewPicture ( vout_thread_t *, picture_t * );
|
||||
static void FreePicture ( vout_thread_t *, picture_t * );
|
||||
@ -174,7 +174,7 @@ static int Open( vlc_object_t *p_this )
|
||||
}
|
||||
#endif
|
||||
|
||||
CreateQtWindow(p_vout);
|
||||
OpenDisplay(p_vout);
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
@ -194,7 +194,7 @@ static void Close ( vlc_object_t *p_this )
|
||||
|
||||
/* Kill RunQtThread */
|
||||
p_vout->p_sys->p_event->b_die = VLC_TRUE;
|
||||
DestroyQtWindow(p_vout);
|
||||
CloseDisplay(p_vout);
|
||||
|
||||
vlc_thread_join( p_vout->p_sys->p_event );
|
||||
vlc_object_destroy( p_vout->p_sys->p_event );
|
||||
@ -289,14 +289,16 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic )
|
||||
vout_PlacePicture( p_vout, p_vout->p_sys->i_width, p_vout->p_sys->i_height,
|
||||
&x, &y, &w, &h );
|
||||
|
||||
#if 0
|
||||
msg_Err(p_vout, "+qte::Display( p_vout, i_width=%d, i_height=%d, x=%u, y=%u, w=%u, h=%u",
|
||||
p_vout->p_sys->i_width, p_vout->p_sys->i_height, x, y, w, h );
|
||||
#endif
|
||||
|
||||
if(p_vout->p_sys->pcVoutWidget)
|
||||
if(p_vout->p_sys->p_VideoWidget)
|
||||
{
|
||||
// shameless borrowed from opie mediaplayer....
|
||||
#ifndef USE_DIRECT_PAINTER
|
||||
QPainter p(p_vout->p_sys->pcVoutWidget);
|
||||
QPainter p(p_vout->p_sys->p_VideoWidget);
|
||||
|
||||
/* rotate frame */
|
||||
int dd = QPixmap::defaultDepth();
|
||||
@ -333,21 +335,18 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic )
|
||||
|
||||
p.drawImage( x, y, rotatedFrame, 0, 0, rw, rh );
|
||||
#else
|
||||
QDirectPainter p(p_vout->p_sys->pcVoutWidget);
|
||||
|
||||
QDirectPainter p(p_vout->p_sys->p_VideoWidget);
|
||||
// just copy the image to the frame buffer...
|
||||
memcpy(p.frameBuffer(), (p_pic->p_sys->pQImage->jumpTable())[0], h * p.lineStep());
|
||||
#endif
|
||||
}
|
||||
msg_Err(p_vout, "-qte::Display" );
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Manage: handle X11 events
|
||||
* Manage: handle Qte events
|
||||
*****************************************************************************
|
||||
* This function should be called regularly by video output thread. It manages
|
||||
* X11 events and allows window resizing. It returns a non null value on
|
||||
* Qte events and allows window resizing. It returns a non null value on
|
||||
* error.
|
||||
*****************************************************************************/
|
||||
static int Manage( vout_thread_t *p_vout )
|
||||
@ -383,7 +382,9 @@ static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic )
|
||||
{
|
||||
int dd = QPixmap::defaultDepth();
|
||||
|
||||
msg_Dbg(p_vout, "+NewPicture::dd = %d",dd );
|
||||
#if 0
|
||||
msg_Dbg(p_vout, "Default Depth = %d",dd );
|
||||
#endif
|
||||
|
||||
p_pic->p_sys = (picture_sys_t*) malloc( sizeof( picture_sys_t ) );
|
||||
|
||||
@ -392,73 +393,46 @@ static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic )
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch(p_vout->output.i_chroma)
|
||||
/* Create the display */
|
||||
p_pic->p_sys->pQImage = new QImage(p_vout->output.i_width,
|
||||
p_vout->output.i_height,
|
||||
dd );
|
||||
|
||||
if(p_pic->p_sys->pQImage == NULL)
|
||||
{
|
||||
case VLC_FOURCC('R','V','1','6'):
|
||||
if(dd == 16)
|
||||
{
|
||||
p_pic->p_sys->pQImage = new QImage(p_vout->output.i_width,
|
||||
p_vout->output.i_height,
|
||||
dd );
|
||||
|
||||
if(p_pic->p_sys->pQImage == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
p_pic->p->p_pixels = (p_pic->p_sys->pQImage->jumpTable())[0];
|
||||
|
||||
p_pic->p->i_pitch = p_pic->p_sys->pQImage->bytesPerLine();
|
||||
|
||||
p_pic->p->i_lines = p_vout->output.i_height;
|
||||
p_pic->p->i_pixel_pitch = 2;
|
||||
p_pic->p->i_visible_pitch = 0;
|
||||
// p_pic->p->i_pixel_bytes = 2;
|
||||
// p_pic->p->b_margin = 0;
|
||||
p_pic->i_planes = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VLC_FOURCC('R','V','3','2'):
|
||||
if(dd == 32)
|
||||
{
|
||||
p_pic->p_sys->pQImage = new QImage(p_vout->output.i_width,
|
||||
p_vout->output.i_height,
|
||||
dd );
|
||||
|
||||
if(p_pic->p_sys->pQImage == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
p_pic->p->p_pixels = (p_pic->p_sys->pQImage->jumpTable())[0];
|
||||
|
||||
p_pic->p->i_pitch = p_pic->p_sys->pQImage->bytesPerLine();
|
||||
|
||||
p_pic->p->i_lines = p_vout->output.i_height;
|
||||
p_pic->p->i_pixel_pitch = 4;
|
||||
p_pic->p->i_visible_pitch = 0;
|
||||
// p_pic->p->i_pixel_bytes = 4;
|
||||
// p_pic->p->b_margin = 0;
|
||||
p_pic->i_planes = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
switch( dd )
|
||||
{
|
||||
case 8:
|
||||
p_pic->p->i_pixel_pitch = 1;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
p_pic->p->i_pixel_pitch = 2;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
p_pic->p->i_pixel_pitch = 4;
|
||||
break;
|
||||
default:
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
p_pic->p->p_pixels = (p_pic->p_sys->pQImage->jumpTable())[0];
|
||||
p_pic->p->i_pitch = p_pic->p_sys->pQImage->bytesPerLine();
|
||||
p_pic->p->i_lines = p_vout->output.i_height;
|
||||
p_pic->p->i_visible_pitch =
|
||||
p_pic->p->i_pixel_pitch * p_vout->output.i_width;
|
||||
|
||||
p_pic->i_planes = 1;
|
||||
|
||||
#if 0
|
||||
msg_Dbg(p_vout, "-NewPicture: %d %d %d",p_vout->output.i_width,
|
||||
p_vout->output.i_height,
|
||||
p_vout->output.i_chroma );
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -478,20 +452,26 @@ static void FreePicture( vout_thread_t *p_vout, picture_t *p_pic )
|
||||
*****************************************************************************/
|
||||
static void ToggleFullScreen ( vout_thread_t *p_vout )
|
||||
{
|
||||
if ( p_vout->b_fullscreen )
|
||||
p_vout->p_sys->p_VideoWidget->showFullScreen();
|
||||
else
|
||||
p_vout->p_sys->p_VideoWidget->showNormal();
|
||||
|
||||
p_vout->b_fullscreen = !p_vout->b_fullscreen;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* CreateQtWindow: create qte applicaton / window
|
||||
* OpenDisplay: create qte applicaton / window
|
||||
*****************************************************************************
|
||||
* Create a window according to video output given size, and set other
|
||||
* properties according to the display properties.
|
||||
*****************************************************************************/
|
||||
static int CreateQtWindow( vout_thread_t *p_vout )
|
||||
static int OpenDisplay( vout_thread_t *p_vout )
|
||||
{
|
||||
msg_Dbg( p_vout, "Creating Qt Window" );
|
||||
|
||||
/* for displaying the vout in a qt window we need the QtApplication */
|
||||
p_vout->p_sys->pcVoutWidget = NULL;
|
||||
msg_Dbg( p_vout, "creating RunQtThread" );
|
||||
p_vout->p_sys->p_VideoWidget = NULL;
|
||||
|
||||
p_vout->p_sys->p_event = (event_thread_t*) vlc_object_create( p_vout, sizeof(event_thread_t) );
|
||||
p_vout->p_sys->p_event->p_vout = p_vout;
|
||||
@ -499,6 +479,7 @@ static int CreateQtWindow( vout_thread_t *p_vout )
|
||||
/* Initializations */
|
||||
p_vout->p_sys->i_width = 320;
|
||||
p_vout->p_sys->i_height = 240;
|
||||
p_vout->b_fullscreen = VLC_TRUE;
|
||||
|
||||
/* create thread to exec the qpe application */
|
||||
if ( vlc_thread_create( p_vout->p_sys->p_event, "QT Embedded Thread",
|
||||
@ -521,11 +502,10 @@ static int CreateQtWindow( vout_thread_t *p_vout )
|
||||
msg_Dbg( p_vout, "RunQtThread running" );
|
||||
|
||||
// just wait until the crew is complete...
|
||||
while(p_vout->p_sys->pcVoutWidget == NULL)
|
||||
while(p_vout->p_sys->p_VideoWidget == NULL)
|
||||
{
|
||||
msleep(1);
|
||||
}
|
||||
|
||||
return VLC_SUCCESS;
|
||||
|
||||
error:
|
||||
@ -535,27 +515,25 @@ static int CreateQtWindow( vout_thread_t *p_vout )
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* DestroyQtWindow: destroy the window
|
||||
* CloseDisplay: destroy the window
|
||||
*****************************************************************************/
|
||||
static void DestroyQtWindow( vout_thread_t *p_vout )
|
||||
static void CloseDisplay( vout_thread_t *p_vout )
|
||||
{
|
||||
// quit qt application loop
|
||||
if(p_vout->p_sys->pcQApplication)
|
||||
msg_Dbg( p_vout, "Destroying Qt Window" );
|
||||
#ifdef NEED_QTE_MAIN
|
||||
if(p_vout->p_sys->p_QApplication)
|
||||
{
|
||||
#ifndef NEED_QTE_MAIN
|
||||
if(p_vout->p_sys->bOwnsQApp)
|
||||
{
|
||||
p_vout->p_sys->pcQApplication->quit();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
p_vout->p_sys->bRunning = FALSE;
|
||||
|
||||
while(p_vout->p_sys->pcVoutWidget)
|
||||
p_vout->p_sys->bRunning = FALSE;
|
||||
while(p_vout->p_sys->p_VideoWidget)
|
||||
{
|
||||
msleep(1);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (p_vout->p_sys->p_QApplication)
|
||||
p_vout->p_sys->p_QApplication->quit();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@ -563,67 +541,70 @@ static void DestroyQtWindow( vout_thread_t *p_vout )
|
||||
*****************************************************************************/
|
||||
static void RunQtThread(event_thread_t *p_event)
|
||||
{
|
||||
int argc = 0;
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread Starting" );
|
||||
|
||||
msg_Dbg( p_event->p_vout, "+qte::RunQtThread" );
|
||||
|
||||
if(qApp == NULL)
|
||||
#ifdef NEED_QTE_MAIN
|
||||
if (qApp)
|
||||
{
|
||||
p_event->p_vout->p_sys->p_QApplication = qApp;
|
||||
p_event->p_vout->p_sys->bOwnsQApp = FALSE;
|
||||
p_event->p_vout->p_sys->p_VideoWidget = qApp->mainWidget();
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread applicaton attached" );
|
||||
}
|
||||
#else
|
||||
if (qApp==NULL)
|
||||
{
|
||||
int argc = 0;
|
||||
QApplication* pApp = new QApplication(argc, NULL);
|
||||
if(pApp)
|
||||
{
|
||||
p_event->p_vout->p_sys->pcQApplication = pApp;
|
||||
p_event->p_vout->p_sys->p_QApplication = pApp;
|
||||
p_event->p_vout->p_sys->bOwnsQApp = TRUE;
|
||||
}
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread application created" );
|
||||
QWidget* pWidget = new QWidget();
|
||||
if (pWidget)
|
||||
{
|
||||
p_event->p_vout->p_sys->p_VideoWidget = pWidget;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
p_event->p_vout->p_sys->pcQApplication = qApp;
|
||||
p_event->p_vout->p_sys->bOwnsQApp = FALSE;
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread applicaton attached" );
|
||||
}
|
||||
|
||||
#endif
|
||||
/* signal the creation of the window */
|
||||
vlc_thread_ready( p_event );
|
||||
msg_Dbg( p_event->p_vout, "+qte::RunQtThread ready" );
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread ready" );
|
||||
|
||||
if (p_event->p_vout->p_sys->pcQApplication)
|
||||
if (p_event->p_vout->p_sys->p_QApplication)
|
||||
{
|
||||
QWidget vo(0, "qte");
|
||||
vo.showFullScreen();
|
||||
vo.show();
|
||||
p_event->p_vout->p_sys->pcVoutWidget = &vo;
|
||||
p_event->p_vout->p_sys->p_VideoWidget->showFullScreen();
|
||||
p_event->p_vout->p_sys->p_VideoWidget->show();
|
||||
p_event->p_vout->p_sys->bRunning = TRUE;
|
||||
|
||||
if(p_event->p_vout->p_sys->bOwnsQApp)
|
||||
{
|
||||
// run the main loop of qtapplication until someone says: 'quit'
|
||||
msg_Dbg( p_event->p_vout, "+qte::RunQtThread starting application" );
|
||||
p_event->p_vout->p_sys->pcQApplication->exec();
|
||||
}
|
||||
else
|
||||
{
|
||||
while(!p_event->b_die && p_event->p_vout->p_sys->bRunning)
|
||||
{
|
||||
/* Check if we are asked to exit */
|
||||
if( p_event->b_die )
|
||||
break;
|
||||
#ifdef NEED_QTE_MAIN
|
||||
while(!p_event->b_die && p_event->p_vout->p_sys->bRunning)
|
||||
{
|
||||
/* Check if we are asked to exit */
|
||||
if( p_event->b_die )
|
||||
break;
|
||||
|
||||
msleep(100);
|
||||
}
|
||||
}
|
||||
msleep(100);
|
||||
}
|
||||
#else
|
||||
// run the main loop of qtapplication until someone says: 'quit'
|
||||
p_event->p_vout->p_sys->pcQApplication->exec();
|
||||
#endif
|
||||
}
|
||||
|
||||
p_event->p_vout->p_sys->pcVoutWidget = NULL;
|
||||
|
||||
if(p_event->p_vout->p_sys->bOwnsQApp)
|
||||
#ifndef NEED_QTE_MAIN
|
||||
if(p_event->p_vout->p_sys->p_QApplication)
|
||||
{
|
||||
msg_Dbg( p_event->p_vout, "+qte::RunQtThread deleting application" );
|
||||
delete p_event->p_vout->p_sys->pcQApplication;
|
||||
p_event->p_vout->p_sys->pcQApplication = NULL;
|
||||
delete p_event->p_vout->p_sys->p_VideoWidget;
|
||||
p_event->p_vout->p_sys->p_VideoWidget = NULL;
|
||||
delete p_event->p_vout->p_sys->p_QApplication;
|
||||
p_event->p_vout->p_sys->p_QApplication = NULL;
|
||||
}
|
||||
#else
|
||||
p_event->p_vout->p_sys->p_VideoWidget = NULL;
|
||||
#endif
|
||||
|
||||
msg_Dbg( p_event->p_vout, "-qte::RunQtThread terminating" );
|
||||
msg_Dbg( p_event->p_vout, "RunQtThread terminating" );
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* qte.h : QT Embedded plugin for vlc
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1998-2002 VideoLAN
|
||||
* $Id: qte.h,v 1.4 2003/01/19 22:16:13 jpsaman Exp $
|
||||
* $Id: qte.h,v 1.5 2003/02/12 23:09:23 jpsaman Exp $
|
||||
*
|
||||
* Authors: Gerald Hansink <gerald.hansink@ordain.nl>
|
||||
* Jean-Paul Saman <jpsaman@wxs.nl>
|
||||
@ -53,13 +53,13 @@ struct vout_sys_t
|
||||
bool bRunning;
|
||||
bool bOwnsQApp;
|
||||
|
||||
QApplication* pcQApplication;
|
||||
QWidget* pcVoutWidget;
|
||||
|
||||
#ifdef NEED_QTE_MAIN
|
||||
module_t * p_qte_main;
|
||||
#endif
|
||||
|
||||
QApplication* p_QApplication;
|
||||
QWidget* p_VideoWidget;
|
||||
|
||||
event_thread_t * p_event;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user