summaryrefslogtreecommitdiff
authorsandman <sandman>2002-08-03 23:58:20 (UTC)
committer sandman <sandman>2002-08-03 23:58:20 (UTC)
commit0cecd08dba036f39e414e34a2b7c070008ee3884 (patch) (side-by-side diff)
treec187c9308f0553b1d5d9cd59093bcc3c11740665
parent8fb605fdfbbcbc654f567efcb59f02ec0d26228a (diff)
downloadopie-0cecd08dba036f39e414e34a2b7c070008ee3884.zip
opie-0cecd08dba036f39e414e34a2b7c070008ee3884.tar.gz
opie-0cecd08dba036f39e414e34a2b7c070008ee3884.tar.bz2
Added support for fullscreen playback
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp29
-rw-r--r--noncore/multimedia/opieplayer2/lib.h2
-rw-r--r--noncore/multimedia/opieplayer2/nullvideo.c11
-rw-r--r--noncore/multimedia/opieplayer2/videowidget.cpp18
-rw-r--r--noncore/multimedia/opieplayer2/videowidget.h3
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.cpp6
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.h2
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.cpp95
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.h20
9 files changed, 126 insertions, 60 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp
index eb57b67..00c534a 100644
--- a/noncore/multimedia/opieplayer2/lib.cpp
+++ b/noncore/multimedia/opieplayer2/lib.cpp
@@ -73,10 +73,5 @@ Lib::Lib(XineVideoWidget* widget) {
printf("!0\n" );
- ::null_set_gui_width( m_videoOutput, m_wid->image()->width() );
- ::null_set_gui_height(m_videoOutput, m_wid->image()->height() );
+ resize ( m_wid-> size ( ));
::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() );
- m_bytes_per_pixel = ( qt_screen->depth() + 7 ) / 8;
- QImage image = Resource::loadImage("");
- image = image.smoothScale( m_wid->width(), m_wid->height() );
- QImage* img = new QImage( image );
- m_wid->setImage( img );
+ m_wid-> setImage ( new QImage ( Resource::loadImage("")));
m_wid->repaint();
@@ -102,2 +97,10 @@ Lib::~Lib() {
+void Lib::resize ( const QSize &s )
+{
+ if ( s. width ( ) && s. height ( )) {
+ ::null_set_gui_width( m_videoOutput, s. width() );
+ ::null_set_gui_height(m_videoOutput, s. height() );
+ }
+}
+
QCString Lib::version() {
@@ -189,5 +192,4 @@ void Lib::xine_display_frame( void* user_data, uint8_t *frame,
int width, int height, int bytes ) {
-// printf("display x frame");
- ((Lib*)user_data)->drawFrame( frame, width, height, bytes );
-// printf("displayed x frame\n");
+
+ ((Lib*)user_data)->drawFrame( frame, width, height, bytes );
}
@@ -200,8 +202,3 @@ void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) {
- QSize size = m_wid->size();
- int xoffset = (size.width() - width) / 2;
- int yoffset = (size.height() - height) / 2;
- int linestep = qt_screen->linestep();
-
- m_wid->setImage( frame, yoffset, xoffset, width, height, linestep, bytes, m_bytes_per_pixel );
+ m_wid->setImage( frame, width, height, bytes );
// m_wid->repaint(false);
diff --git a/noncore/multimedia/opieplayer2/lib.h b/noncore/multimedia/opieplayer2/lib.h
index d568a32..a15f362 100644
--- a/noncore/multimedia/opieplayer2/lib.h
+++ b/noncore/multimedia/opieplayer2/lib.h
@@ -34,2 +34,4 @@ namespace XINE {
+ void resize ( const QSize &s );
+
int play( const QString& fileName,
diff --git a/noncore/multimedia/opieplayer2/nullvideo.c b/noncore/multimedia/opieplayer2/nullvideo.c
index 3a18a40..5ee8d5d 100644
--- a/noncore/multimedia/opieplayer2/nullvideo.c
+++ b/noncore/multimedia/opieplayer2/nullvideo.c
@@ -66,2 +66,3 @@ struct opie_frame_s {
int output_width, output_height;
+ int gui_width, gui_height;
uint8_t *chunk[3];
@@ -295,3 +296,4 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img,
|| (this->user_ratio != frame->user_ratio)
- || this->gui_changed ) {
+ || (this->gui_width != frame-> gui_width )
+ || (this-> gui_height != frame-> gui_height)) {
@@ -305,3 +307,4 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img,
// frame->show_video = this->m_show_video;
-
+ frame->gui_width = this->gui_width;
+ frame->gui_height = this->gui_height;
@@ -538,4 +541,4 @@ vo_driver_t* init_video_out_plugin( config_values_t* conf,
vo->display_ratio = 1.0;
- vo->gui_width = 200;
- vo->gui_height = 150;
+ vo->gui_width = 16;
+ vo->gui_height = 8;
vo->frameDis = NULL;
diff --git a/noncore/multimedia/opieplayer2/videowidget.cpp b/noncore/multimedia/opieplayer2/videowidget.cpp
index 48caf00..af06079 100644
--- a/noncore/multimedia/opieplayer2/videowidget.cpp
+++ b/noncore/multimedia/opieplayer2/videowidget.cpp
@@ -112,2 +112,6 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
+ videoFrame = new XineVideoWidget ( this, "Video frame" );
+
+ connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & )));
+
connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
@@ -129,4 +133,2 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
- videoFrame = new XineVideoWidget( 240, 155 ,this, "Video frame" );
-
}
@@ -281,2 +283,3 @@ void VideoWidget::makeVisible() {
slider->hide();
+ videoFrame-> setGeometry ( 0, 0, width ( ), height ( ));
} else {
@@ -286,2 +289,3 @@ void VideoWidget::makeVisible() {
slider->show();
+ videoFrame->setGeometry( QRect( 10, 20, 220, 160 ) );
}
@@ -296,3 +300,3 @@ void VideoWidget::paintEvent( QPaintEvent * ) {
p.setBrush( QBrush( Qt::black ) );
- videoFrame->setGeometry( QRect( 0, 0 , 240 ,340 ) );
+// videoFrame->setGeometry( QRect( 0, 0 , 240 ,320 ) );
@@ -300,3 +304,3 @@ void VideoWidget::paintEvent( QPaintEvent * ) {
- videoFrame->setGeometry( QRect( 0, 15 , 240 ,170 ) );
+ // videoFrame->setGeometry( QRect( 0, 15 , 240 ,170 ) );
// draw the buttons
@@ -384 +388,7 @@ XineVideoWidget* VideoWidget::vidWidget() {
}
+
+
+void VideoWidget::setFullscreen ( bool b )
+{
+ setToggleButton( VideoFullscreen, b );
+} \ No newline at end of file
diff --git a/noncore/multimedia/opieplayer2/videowidget.h b/noncore/multimedia/opieplayer2/videowidget.h
index 0122d5d..fc53f89 100644
--- a/noncore/multimedia/opieplayer2/videowidget.h
+++ b/noncore/multimedia/opieplayer2/videowidget.h
@@ -66,3 +66,3 @@ public slots:
void setPlaying( bool b) { setToggleButton( VideoPlay, b ); }
- void setFullscreen( bool b ) { setToggleButton( VideoFullscreen, b ); }
+ void setFullscreen( bool b );
void makeVisible();
@@ -74,2 +74,3 @@ signals:
void sliderMoved( long );
+ void videoResized ( const QSize &s );
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp
index 19a9172..33889d0 100644
--- a/noncore/multimedia/opieplayer2/xinecontrol.cpp
+++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp
@@ -45,2 +45,3 @@ XineControl::XineControl( QObject *parent, const char *name )
+ connect ( videoUI, SIGNAL( videoResized ( const QSize & )), this, SLOT( videoResized ( const QSize & )));
connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) );
@@ -130 +131,6 @@ void XineControl::seekTo( long second ) {
+
+void XineControl::videoResized ( const QSize &s )
+{
+ libXine-> resize ( s );
+}
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.h b/noncore/multimedia/opieplayer2/xinecontrol.h
index 295d2b4..4a61f32 100644
--- a/noncore/multimedia/opieplayer2/xinecontrol.h
+++ b/noncore/multimedia/opieplayer2/xinecontrol.h
@@ -58,2 +58,4 @@ public slots:
+ void videoResized ( const QSize &s );
+
private:
diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.cpp b/noncore/multimedia/opieplayer2/xinevideowidget.cpp
index 4b69044..98446a0 100644
--- a/noncore/multimedia/opieplayer2/xinevideowidget.cpp
+++ b/noncore/multimedia/opieplayer2/xinevideowidget.cpp
@@ -40,2 +40,3 @@
#include <qsize.h>
+#include <qapplication.h>
@@ -45,2 +46,3 @@
+
static inline void memcpy_rev ( void *dst, void *src, size_t len )
@@ -76,17 +78,15 @@ static inline void memcpy_step_rev ( void *dst, void *src, size_t len, size_t st
-XineVideoWidget::XineVideoWidget( int width,
- int height,
- QWidget* parent,
- const char* name )
+XineVideoWidget::XineVideoWidget ( QWidget* parent, const char* name )
: QWidget ( parent, name, WRepaintNoErase | WResizeNoErase )
{
- m_image = new QImage ( width, height, qt_screen-> depth ( ));
- m_buff = 0;
setBackgroundMode ( NoBackground );
- /* QImage image = Resource::loadImage("SoundPlayer");
- image = image.smoothScale( width, height );
-
- m_image = new QImage( image );*/
+
+ m_image = 0;
+ m_buff = 0;
+ m_bytes_per_line_fb = qt_screen-> linestep ( );
+ m_bytes_per_pixel = ( qt_screen->depth() + 7 ) / 8;
+ m_rotation = 0;
}
+
XineVideoWidget::~XineVideoWidget ( )
@@ -108,3 +108,4 @@ void XineVideoWidget::paintEvent ( QPaintEvent * )
p. fillRect ( rect ( ), black );
- p. drawImage ( 0, 0, *m_image );
+ if ( m_image )
+ p. drawImage ( 0, 0, *m_image );
//qWarning ( "logo\n" );
@@ -119,3 +120,3 @@ void XineVideoWidget::paintEvent ( QPaintEvent * )
- int rot = dp. transformOrientation ( );
+ int rot = dp. transformOrientation ( ) + m_rotation;
@@ -199,11 +200,2 @@ void XineVideoWidget::paintEvent ( QPaintEvent * )
-int XineVideoWidget::height ( ) const
-{
- return m_image-> height ( );
-}
-
-int XineVideoWidget::width ( ) const
-{
- return m_image-> width ( );
-}
@@ -215,14 +207,19 @@ void XineVideoWidget::setImage ( QImage* image )
-void XineVideoWidget::setImage( uchar* image, int yoffsetXLine,
- int xoffsetXBytes, int width,
- int height, int linestep, int bytes, int bpp )
+void XineVideoWidget::setImage ( uchar* img, int w, int h, int bpl )
{
+ bool rot90 = (( -m_rotation ) & 1 );
+
+ if ( rot90 ) {
+ int d = w;
+ w = h;
+ h = d;
+ }
m_lastframe = m_thisframe;
- m_thisframe. setRect ( xoffsetXBytes, yoffsetXLine, width, height );
+ m_thisframe. setRect (( width ( ) - w ) / 2, ( height ( ) - h ) / 2, w , h );
- m_buff = image;
- m_bytes_per_line_fb = linestep;
- m_bytes_per_line_frame = bytes;
- m_bytes_per_pixel = bpp;
+// qDebug ( "Frame: %d,%d - %dx%d", ( width ( ) - w ) / 2, ( height ( ) - h ) / 2, w , h );
+
+ m_buff = img;
+ m_bytes_per_line_frame = bpl;
@@ -230 +227,41 @@ void XineVideoWidget::setImage( uchar* image, int yoffsetXLine,
}
+
+void XineVideoWidget::resizeEvent ( QResizeEvent * )
+{
+ QSize s = size ( );
+ bool fs = ( s == qApp-> desktop ( )-> size ( ));
+
+ m_rotation = fs ? -qt_screen-> transformOrientation ( ) : 0;
+
+ if ( fs && qt_screen-> isTransformed ( )) {
+ s = qt_screen-> mapToDevice ( s );
+ }
+
+// qDebug ( "\n\nResize: %dx%d, Rot: %d", s.width(),s.height(),m_rotation );
+
+ emit videoResized ( s );
+}
+
+
+void XineVideoWidget::mousePressEvent ( QMouseEvent *me )
+{
+ QWidget *p = parentWidget ( );
+
+ if ( p ) {
+ QMouseEvent pme ( QEvent::MouseButtonPress, mapToParent ( me-> pos ( )), me-> globalPos ( ), me-> button ( ), me-> state ( ));
+
+ QApplication::sendEvent ( p, &pme );
+ }
+}
+
+void XineVideoWidget::mouseReleaseEvent ( QMouseEvent *me )
+{
+ QWidget *p = parentWidget ( );
+
+ if ( p ) {
+ QMouseEvent pme ( QEvent::MouseButtonRelease, mapToParent ( me-> pos ( )), me-> globalPos ( ), me-> button ( ), me-> state ( ));
+
+ QApplication::sendEvent ( p, &pme );
+ }
+}
+
diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.h b/noncore/multimedia/opieplayer2/xinevideowidget.h
index 7d9a6d2..2fc627d 100644
--- a/noncore/multimedia/opieplayer2/xinevideowidget.h
+++ b/noncore/multimedia/opieplayer2/xinevideowidget.h
@@ -37,2 +37,4 @@
+#include "lib.h"
+
class QImage;
@@ -41,3 +43,3 @@ class XineVideoWidget : public QWidget {
public:
- XineVideoWidget( int width, int height, QWidget* parent, const char* name );
+ XineVideoWidget( QWidget* parent, const char* name );
~XineVideoWidget();
@@ -45,9 +47,15 @@ public:
void setImage( QImage* image );
- void setImage( uchar* image, int yoffsetXLine, int xoffsetXBytes,
- int width, int height, int linestep, int bytes, int bpp);
- int width() const;
- int height() const;
+ void setImage( uchar* image, int width, int height, int linestep);
void clear() ;
+
protected:
void paintEvent( QPaintEvent* p );
+ void resizeEvent ( QResizeEvent *r );
+
+ void mousePressEvent ( QMouseEvent *e );
+ void mouseReleaseEvent ( QMouseEvent *e );
+
+signals:
+ void videoResized ( const QSize &s );
+
private:
@@ -61,3 +69,3 @@ private:
QImage* m_image;
-
+ int m_rotation;
};