author | alwin <alwin> | 2005-04-11 21:53:59 (UTC) |
---|---|---|
committer | alwin <alwin> | 2005-04-11 21:53:59 (UTC) |
commit | df382ea245959ed4d27012358e24c4c95767270f (patch) (side-by-side diff) | |
tree | c1d71289d9773461692c8c181fef3b27e402eb0d | |
parent | 840e44417402bbc6048ca5e8ff3dd6be966e753f (diff) | |
download | opie-df382ea245959ed4d27012358e24c4c95767270f.zip opie-df382ea245959ed4d27012358e24c4c95767270f.tar.gz opie-df382ea245959ed4d27012358e24c4c95767270f.tar.bz2 |
next stage of bug hunting
seems that errors/problems in pure display are fixed. removed all qpaint
stuff may invoked in xine-thread (evil,evil!) - I think it isn't needed
there.
so I deactivated the mutex this moment
-rw-r--r-- | noncore/multimedia/opieplayer2/xinevideowidget.cpp | 101 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinevideowidget.h | 42 |
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,33 +1,33 @@ /* - 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. */ @@ -167,41 +167,27 @@ QSize XineVideoWidget::videoSize() const 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; @@ -211,46 +197,26 @@ void XineVideoWidget::paintEvent2 ( QPaintEvent * ) 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: @@ -287,17 +253,19 @@ void XineVideoWidget::setLogo ( QImage* 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; } @@ -312,20 +280,23 @@ 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,34 +1,34 @@ /* - 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. */ |