summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.cpp101
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.h42
2 files changed, 57 insertions, 86 deletions
diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.cpp b/noncore/multimedia/opieplayer2/xinevideowidget.cpp
index 78ebe19..b27b8e1 100644
--- a/noncore/multimedia/opieplayer2/xinevideowidget.cpp
+++ b/noncore/multimedia/opieplayer2/xinevideowidget.cpp
@@ -1,35 +1,35 @@
/*
-                This file is part of the Opie Project
+ This file is part of the Opie Project
-              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
+ Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
=.
.=l.
-           .>+-=
- _;:,     .>    :=|. This program is free software; you can
-.> <`_,   >  .   <= redistribute it and/or modify it under
-:`=1 )Y*s>-.--   : the terms of the GNU General Public
-.="- .-=="i,     .._ License as published by the Free Software
- - .   .-<_>     .<> Foundation; either version 2 of the License,
-     ._= =}       : or (at your option) any later version.
-    .%`+i>       _;_.
-    .i_,=:_.      -<s. This program is distributed in the hope that
-     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
-    : ..    .:,     . . . without even the implied warranty of
-    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
-  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
-..}^=.=       =       ; Library General Public License for more
-++=   -.     .`     .: details.
- :     =  ...= . :.=-
- -.   .:....=;==+<; You should have received a copy of the GNU
-  -_. . .   )=.  = Library General Public License along with
-    --        :-=` this library; see the file COPYING.LIB.
+ .>+-=
+ _;:, .> :=|. This program is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This program is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "xinevideowidget.h"
#include <opie2/odebug.h>
@@ -165,94 +165,60 @@ QSize XineVideoWidget::videoSize() const
if ( fs && qt_screen->isTransformed() )
s = qt_screen->mapToDevice( s );
return s;
}
void XineVideoWidget::paintEvent ( QPaintEvent * )
{
- if (m_bufmutex.isLocked()) {
- return;
- }
- ThreadUtil::AutoLock a(m_bufmutex);
QPainter p ( this );
p. fillRect ( rect (), black );
if (m_logo)
p. drawImage ( 0, 0, *m_logo );
}
void XineVideoWidget::paintEvent2 ( QPaintEvent * )
{
- ThreadUtil::AutoLock a(m_bufmutex);
- QPainter p (this);
if ( m_buff == 0 ) {
- p. fillRect ( rect ( ), black );
- if ( m_logo )
- p. drawImage ( 0, 0, *m_logo );
+ return;
} else if (m_lastsize){
- // Qt needs to be notified which areas were really updated .. strange
- QArray <QRect> qt_bug_workaround_clip_rects;
-
{
QDirectPainter dp ( this );
-
int rot = dp. transformOrientation ( ) + m_rotation; // device rotation + custom rotation
-
bool rot90 = (( -m_rotation ) & 1 );
-
int _vw,_vh;
switch (rot90) {
case true:
_vh = m_framesize.width();
_vw = m_framesize.height();
break;
default:
_vw = m_framesize.width();
_vh = m_framesize.height();
break;
break;
}
int middle_w = _vw/2;
int middle_h = _vh/2;
m_thisframe.setRect(width()/2-middle_w,height()/2-middle_h,_vw,_vh);
-
- {
- // is this stuff realy needed? it seems working without, too.
- QRect topFill,rightFill,leftFill,downFill;
- topFill. setRect(0,0 ,width(),m_thisframe.top());
- downFill.setCoords(0,m_thisframe.bottom(),width(),height());
- rightFill.setCoords(m_thisframe.right(),0,width(),height());
- leftFill.setCoords(0,0,m_thisframe.left(),height());
-
- if (topFill.isValid()) {
- p.fillRect(topFill,black);
- }
- if (downFill.isValid()) {
- p.fillRect(downFill,black);
- }
- if (rightFill.isValid()) {
- p.fillRect(rightFill,black);
- }
- if (leftFill.isValid()) {
- p.fillRect(leftFill,black);
- }
-
- }
uchar *fb = dp. frameBuffer ( );
uchar *frame = m_buff;
// where is the video frame in fb coordinates
QRect framerect = qt_screen-> mapToDevice ( QRect ( mapToGlobal ( m_thisframe. topLeft ( )), m_thisframe. size ( )), QSize ( qt_screen-> width ( ),
qt_screen-> height ( )));
uchar * src = frame;
uchar * dst = fb+framerect.y()*m_bytes_per_line_fb+framerect.x()*m_bytes_per_pixel;
- for (int y=framerect.top();y<=framerect.bottom();++y) {
+ if (framerect.height()!=m_framesize.height()) {
+ odebug << "Hoehm: " << framerect.height() << " <-> " << m_framesize.height() << oendl;
+ }
+ for (int y = 0;y<framerect.height();++y) {
switch (rot) {
case 0:
memcpy(dst,src,m_bytes_per_line_frame);
src+=m_bytes_per_line_frame;
break;
case 1:
memcpy_step ( dst, src, m_thisframe.size().width(), m_bytes_per_line_frame );
src -= m_bytes_per_pixel;
@@ -285,21 +251,23 @@ void XineVideoWidget::setLogo ( QImage* logo )
delete m_logo;
m_logo = logo;
}
void XineVideoWidget::setVideoFrame ( uchar* img, int w, int h, int bpl )
{
// mutex area for AutoLock
{
- if (m_bufmutex.isLocked()||w>width()||h>height()) {
- // no time to wait - drop frame
+#if 0
+ ThreadUtil::AutoLock a(m_bufmutex);
+#endif
+ if (!isVisible()||w>width()||h>height()/*||m_bufmutex.isLocked()*/) {
+ //drop frame
return;
}
- ThreadUtil::AutoLock a(m_bufmutex);
bool rot90 = (( -m_rotation ) & 1 );
int l = h*bpl;
if (l!=m_lastsize) {
if (m_buff) {
delete[]m_buff;
}
if (l>0) {
m_buff = new uchar[l];
@@ -310,24 +278,27 @@ void XineVideoWidget::setVideoFrame ( uchar* img, int w, int h, int bpl )
}
}
m_lastsize = l;
m_framesize = QSize(w,h);
if (m_buff && m_lastsize) {
memcpy(m_buff,img,m_lastsize);
}
m_bytes_per_line_frame = bpl;
+ if (m_buff) paintEvent2(0);
} // Release Mutex
-
- if (m_buff) paintEvent2(0);
}
void XineVideoWidget::resizeEvent ( QResizeEvent * )
{
+#if 0
+ ThreadUtil::AutoLock a(m_bufmutex);
+#endif
emit videoResized( videoSize() );
+ odebug << "All resize done" << oendl;
}
void XineVideoWidget::mouseReleaseEvent ( QMouseEvent * /*me*/ )
{
emit clicked();
}
diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.h b/noncore/multimedia/opieplayer2/xinevideowidget.h
index eccff1a..a0ec5bc 100644
--- a/noncore/multimedia/opieplayer2/xinevideowidget.h
+++ b/noncore/multimedia/opieplayer2/xinevideowidget.h
@@ -1,36 +1,36 @@
/*
-                This file is part of the Opie Project
+ This file is part of the Opie Project
-              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
+ Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
=.
.=l.
-           .>+-=
- _;:,     .>    :=|. This program is free software; you can
-.> <`_,   >  .   <= redistribute it and/or modify it under
-:`=1 )Y*s>-.--   : the terms of the GNU General Public
-.="- .-=="i,     .._ License as published by the Free Software
- - .   .-<_>     .<> Foundation; either version 2 of the License,
-     ._= =}       : or (at your option) any later version.
-    .%`+i>       _;_.
-    .i_,=:_.      -<s. This program is distributed in the hope that
-     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
-    : ..    .:,     . . . without even the implied warranty of
-    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
-  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
-..}^=.=       =       ; Library General Public License for more
-++=   -.     .`     .: details.
- :     =  ...= . :.=-
- -.   .:....=;==+<; You should have received a copy of the GNU
-  -_. . .   )=.  = Library General Public License along with
-    --        :-=` this library; see the file COPYING.LIB.
+ .>+-=
+ _;:, .> :=|. This program is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This program is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <qwidget.h>