summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.cpp9
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.h20
-rw-r--r--noncore/multimedia/opieplayer2/nullvideo.c142
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidget.cpp5
4 files changed, 81 insertions, 95 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp
index e21b0b1..6ccf206 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.cpp
+++ b/noncore/multimedia/opieplayer2/audiowidget.cpp
@@ -102,100 +102,105 @@ AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) :
102 //skin = "scaleTest"; 102 //skin = "scaleTest";
103 // color of background, frame, degree of transparency 103 // color of background, frame, degree of transparency
104 104
105 QString skinPath = "opieplayer2/skins/" + skin; 105 QString skinPath = "opieplayer2/skins/" + skin;
106 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 106 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
107 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 107 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
108 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 108 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
109 109
110 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 ); 110 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 );
111 imgButtonMask->fill( 0 ); 111 imgButtonMask->fill( 0 );
112 112
113 for ( int i = 0; i < 10; i++ ) { 113 for ( int i = 0; i < 10; i++ ) {
114 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png" ); 114 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png" );
115 masks[i] = new QBitmap( filename ); 115 masks[i] = new QBitmap( filename );
116 116
117 if ( !masks[i]->isNull() ) { 117 if ( !masks[i]->isNull() ) {
118 QImage imgMask = masks[i]->convertToImage(); 118 QImage imgMask = masks[i]->convertToImage();
119 uchar **dest = imgButtonMask->jumpTable(); 119 uchar **dest = imgButtonMask->jumpTable();
120 for ( int y = 0; y < imgUp->height(); y++ ) { 120 for ( int y = 0; y < imgUp->height(); y++ ) {
121 uchar *line = dest[y]; 121 uchar *line = dest[y];
122 for ( int x = 0; x < imgUp->width(); x++ ) 122 for ( int x = 0; x < imgUp->width(); x++ )
123 if ( !qRed( imgMask.pixel( x, y ) ) ) 123 if ( !qRed( imgMask.pixel( x, y ) ) )
124 line[x] = i + 1; 124 line[x] = i + 1;
125 } 125 }
126 } 126 }
127 127
128 } 128 }
129 129
130 for ( int i = 0; i < 10; i++ ) { 130 for ( int i = 0; i < 10; i++ ) {
131 buttonPixUp[i] = 0l; 131 buttonPixUp[i] = 0l;
132 buttonPixDown[i] = 0l; 132 buttonPixDown[i] = 0l;
133 } 133 }
134 134
135 setBackgroundPixmap( *pixBg ); 135 setBackgroundPixmap( *pixBg );
136 136
137 songInfo.setFocusPolicy( QWidget::NoFocus ); 137 songInfo.setFocusPolicy( QWidget::NoFocus );
138// changeTextColor( &songInfo ); 138// changeTextColor( &songInfo );
139// songInfo.setBackgroundColor( QColor( 167, 212, 167 )); 139// songInfo.setBackgroundColor( QColor( 167, 212, 167 ));
140// songInfo.setFrameStyle( QFrame::NoFrame); 140// songInfo.setFrameStyle( QFrame::NoFrame);
141 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 141 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
142// songInfo.setForegroundColor(Qt::white); 142// songInfo.setForegroundColor(Qt::white);
143 143
144 slider.setFixedHeight( 20 ); 144 slider.setFixedHeight( 20 );
145 slider.setMinValue( 0 ); 145 slider.setMinValue( 0 );
146 slider.setMaxValue( 1 ); 146 slider.setMaxValue( 1 );
147 slider.setFocusPolicy( QWidget::NoFocus ); 147 slider.setFocusPolicy( QWidget::NoFocus );
148 slider.setBackgroundPixmap( *pixBg ); 148 slider.setBackgroundPixmap( *pixBg );
149 149
150// Config cofg("qpe");
151// cofg.setGroup("Appearance");
152// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) );
153
150 time.setFocusPolicy( QWidget::NoFocus ); 154 time.setFocusPolicy( QWidget::NoFocus );
151 time.setAlignment( Qt::AlignCenter ); 155 time.setAlignment( Qt::AlignCenter );
152 time.setFrame(FALSE); 156
153 changeTextColor( &time ); 157// time.setFrame(FALSE);
158// changeTextColor( &time );
154 159
155 resizeEvent( NULL ); 160 resizeEvent( NULL );
156 161
157 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) ); 162 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
158 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) ); 163 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
159 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 164 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
160 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); 165 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
161 connect( mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) ); 166 connect( mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) );
162 167
163 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); 168 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) );
164 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); 169 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) );
165 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); 170 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) );
166 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); 171 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) );
167 172
168 // Intialise state 173 // Intialise state
169 setLength( mediaPlayerState->length() ); 174 setLength( mediaPlayerState->length() );
170 setPosition( mediaPlayerState->position() ); 175 setPosition( mediaPlayerState->position() );
171 setLooping( mediaPlayerState->fullscreen() ); 176 setLooping( mediaPlayerState->fullscreen() );
172 // setPaused( mediaPlayerState->paused() ); 177 // setPaused( mediaPlayerState->paused() );
173 setPlaying( mediaPlayerState->playing() ); 178 setPlaying( mediaPlayerState->playing() );
174 179
175} 180}
176 181
177AudioWidget::~AudioWidget() { 182AudioWidget::~AudioWidget() {
178 183
179 for ( int i = 0; i < 10; i++ ) { 184 for ( int i = 0; i < 10; i++ ) {
180 delete buttonPixUp[i]; 185 delete buttonPixUp[i];
181 delete buttonPixDown[i]; 186 delete buttonPixDown[i];
182 } 187 }
183 delete pixBg; 188 delete pixBg;
184 delete imgUp; 189 delete imgUp;
185 delete imgDn; 190 delete imgDn;
186 delete imgButtonMask; 191 delete imgButtonMask;
187 for ( int i = 0; i < 10; i++ ) { 192 for ( int i = 0; i < 10; i++ ) {
188 delete masks[i]; 193 delete masks[i];
189 } 194 }
190// mediaPlayerState->setPlaying(false); 195// mediaPlayerState->setPlaying(false);
191} 196}
192 197
193namespace { 198namespace {
194 199
195QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 200QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
196 QPixmap pix( img.width(), img.height() ); 201 QPixmap pix( img.width(), img.height() );
197 QPainter p( &pix ); 202 QPainter p( &pix );
198 p.drawTiledPixmap( pix.rect(), bg, offset ); 203 p.drawTiledPixmap( pix.rect(), bg, offset );
199 p.drawImage( 0, 0, img ); 204 p.drawImage( 0, 0, img );
200 return new QPixmap( pix ); 205 return new QPixmap( pix );
201} 206}
diff --git a/noncore/multimedia/opieplayer2/audiowidget.h b/noncore/multimedia/opieplayer2/audiowidget.h
index bcd941e..7cb1d79 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.h
+++ b/noncore/multimedia/opieplayer2/audiowidget.h
@@ -1,150 +1,134 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#ifndef AUDIO_WIDGET_H 34#ifndef AUDIO_WIDGET_H
35#define AUDIO_WIDGET_H 35#define AUDIO_WIDGET_H
36 36
37#include <qwidget.h> 37#include <qwidget.h>
38#include <qpainter.h> 38#include <qpainter.h>
39#include <qdrawutil.h> 39#include <qdrawutil.h>
40#include <qpixmap.h> 40#include <qpixmap.h>
41#include <qstring.h> 41#include <qstring.h>
42#include <qslider.h> 42#include <qslider.h>
43#include <qframe.h> 43#include <qframe.h>
44#include <qlineedit.h> 44#include <qlineedit.h>
45 45
46#include <opie/oticker.h>
46 47
47class QPixmap; 48class QPixmap;
48 49
49namespace { 50namespace {
50 51
51enum AudioButtons { 52enum AudioButtons {
52 AudioPlay=0, 53 AudioPlay=0,
53 AudioStop, 54 AudioStop,
54 AudioNext, 55 AudioNext,
55 AudioPrevious, 56 AudioPrevious,
56 AudioVolumeUp, 57 AudioVolumeUp,
57 AudioVolumeDown, 58 AudioVolumeDown,
58 AudioLoop, 59 AudioLoop,
59 AudioPlayList, 60 AudioPlayList,
60 AudioForward, 61 AudioForward,
61 AudioBack 62 AudioBack
62}; 63};
63}; 64};
64 65
65class Ticker : public QFrame {
66 Q_OBJECT
67
68public:
69 Ticker( QWidget* parent=0 );
70 ~Ticker();
71 void setText( const QString& text ) ;
72
73protected:
74 void timerEvent( QTimerEvent * );
75 void drawContents( QPainter *p );
76private:
77 QString scrollText;
78 int pos, pixelLen;
79};
80
81
82class AudioWidget : public QWidget { 66class AudioWidget : public QWidget {
83 Q_OBJECT 67 Q_OBJECT
84public: 68public:
85 AudioWidget( QWidget* parent=0, const char* name=0, WFlags f=0 ); 69 AudioWidget( QWidget* parent=0, const char* name=0, WFlags f=0 );
86 ~AudioWidget(); 70 ~AudioWidget();
87 void setTickerText( const QString &text ) { songInfo.setText( text ); } 71 void setTickerText( const QString &text ) { songInfo.setText( text ); }
88public slots: 72public slots:
89 void updateSlider( long, long ); 73 void updateSlider( long, long );
90 void sliderPressed( ); 74 void sliderPressed( );
91 void sliderReleased( ); 75 void sliderReleased( );
92 void setLooping( bool b) { setToggleButton( AudioLoop, b ); } 76 void setLooping( bool b) { setToggleButton( AudioLoop, b ); }
93 void setPlaying( bool b) { setToggleButton( AudioPlay, b ); } 77 void setPlaying( bool b) { setToggleButton( AudioPlay, b ); }
94 void setPosition( long ); 78 void setPosition( long );
95 void setLength( long ); 79 void setLength( long );
96 void setSeekable( bool ); 80 void setSeekable( bool );
97 void setView( char ); 81 void setView( char );
98 82
99signals: 83signals:
100 void moreClicked(); 84 void moreClicked();
101 void lessClicked(); 85 void lessClicked();
102 void moreReleased(); 86 void moreReleased();
103 void lessReleased(); 87 void lessReleased();
104 void forwardClicked(); 88 void forwardClicked();
105 void backClicked(); 89 void backClicked();
106 void forwardReleased(); 90 void forwardReleased();
107 void backReleased(); 91 void backReleased();
108 void sliderMoved(long); 92 void sliderMoved(long);
109 93
110protected: 94protected:
111 void doBlank(); 95 void doBlank();
112 void doUnblank(); 96 void doUnblank();
113 void paintEvent( QPaintEvent *pe ); 97 void paintEvent( QPaintEvent *pe );
114 void showEvent( QShowEvent *se ); 98 void showEvent( QShowEvent *se );
115 void resizeEvent( QResizeEvent *re ); 99 void resizeEvent( QResizeEvent *re );
116 void mouseMoveEvent( QMouseEvent *event ); 100 void mouseMoveEvent( QMouseEvent *event );
117 void mousePressEvent( QMouseEvent *event ); 101 void mousePressEvent( QMouseEvent *event );
118 void mouseReleaseEvent( QMouseEvent *event ); 102 void mouseReleaseEvent( QMouseEvent *event );
119 void timerEvent( QTimerEvent *event ); 103 void timerEvent( QTimerEvent *event );
120 void closeEvent( QCloseEvent *event ); 104 void closeEvent( QCloseEvent *event );
121 void keyReleaseEvent( QKeyEvent *e); 105 void keyReleaseEvent( QKeyEvent *e);
122private slots: 106private slots:
123 void skipFor(); 107 void skipFor();
124 void skipBack(); 108 void skipBack();
125 void stopSkip(); 109 void stopSkip();
126private: 110private:
127 void toggleButton( int ); 111 void toggleButton( int );
128 void setToggleButton( int, bool ); 112 void setToggleButton( int, bool );
129 void paintButton( QPainter *p, int i ); 113 void paintButton( QPainter *p, int i );
130 int skipDirection; 114 int skipDirection;
131 QString skin; 115 QString skin;
132 QPixmap *pixBg; 116 QPixmap *pixBg;
133 QImage *imgUp; 117 QImage *imgUp;
134 QImage *imgDn; 118 QImage *imgDn;
135 QImage *imgButtonMask; 119 QImage *imgButtonMask;
136 QBitmap *masks[10]; 120 QBitmap *masks[10];
137 QPixmap *buttonPixUp[10]; 121 QPixmap *buttonPixUp[10];
138 QPixmap *buttonPixDown[10]; 122 QPixmap *buttonPixDown[10];
139 123
140 QPixmap *pixmaps[4]; 124 QPixmap *pixmaps[4];
141 Ticker songInfo; 125 OTicker songInfo;
142 QSlider slider; 126 QSlider slider;
143 QLineEdit time; 127 QLineEdit time;
144 int xoff, yoff; 128 int xoff, yoff;
145 bool isStreaming : 1; 129 bool isStreaming : 1;
146}; 130};
147 131
148 132
149#endif // AUDIO_WIDGET_H 133#endif // AUDIO_WIDGET_H
150 134
diff --git a/noncore/multimedia/opieplayer2/nullvideo.c b/noncore/multimedia/opieplayer2/nullvideo.c
index 707efeb..9c285a0 100644
--- a/noncore/multimedia/opieplayer2/nullvideo.c
+++ b/noncore/multimedia/opieplayer2/nullvideo.c
@@ -9,602 +9,602 @@
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include <stdlib.h> 34#include <stdlib.h>
35#include <stdio.h> 35#include <stdio.h>
36 36
37#include <math.h> 37#include <math.h>
38 38
39#include <xine.h> 39#include <xine.h>
40#include <xine/video_out.h> 40#include <xine/video_out.h>
41#include <xine/xine_internal.h> 41#include <xine/xine_internal.h>
42#include <xine/xineutils.h> 42#include <xine/xineutils.h>
43#include <xine/vo_scale.h> 43#include <xine/vo_scale.h>
44 44
45#include <pthread.h> 45#include <pthread.h>
46#include "alphablend.h" 46#include "alphablend.h"
47#include "yuv2rgb.h" 47#include "yuv2rgb.h"
48 48
49#define printf(x,...) 49#define printf(x,...)
50 50
51/* 51/*
52#define LOG 52#define LOG
53*/ 53*/
54 54
55/* the caller for our event draw handler */ 55/* the caller for our event draw handler */
56typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame, 56typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame,
57 int width, int height,int bytes ); 57 int width, int height,int bytes );
58 58
59typedef struct null_driver_s null_driver_t; 59typedef struct null_driver_s null_driver_t;
60 60
61struct null_driver_s { 61struct null_driver_s {
62 xine_vo_driver_t vo_driver; 62 xine_vo_driver_t vo_driver;
63 63
64 uint32_t m_capabilities; 64 uint32_t m_capabilities;
65 int m_show_video; 65 int m_show_video;
66 int m_video_fullscreen; 66 int m_video_fullscreen;
67 int m_is_scaling; 67 int m_is_scaling;
68 68
69 int depth, bpp, bytes_per_pixel; 69 int depth, bpp, bytes_per_pixel;
70 int yuv2rgb_mode; 70 int yuv2rgb_mode;
71 int yuv2rgb_swap; 71 int yuv2rgb_swap;
72 int yuv2rgb_gamma; 72 int yuv2rgb_gamma;
73 uint8_t *yuv2rgb_cmap; 73 uint8_t *yuv2rgb_cmap;
74 yuv2rgb_factory_t *yuv2rgb_factory; 74 yuv2rgb_factory_t *yuv2rgb_factory;
75 75
76 vo_overlay_t *overlay; 76 vo_overlay_t *overlay;
77 vo_scale_t sc; 77 vo_scale_t sc;
78 78
79 int gui_width; 79 int gui_width;
80 int gui_height; 80 int gui_height;
81 int gui_changed; 81 int gui_changed;
82 82
83 double display_ratio; 83 double display_ratio;
84 void* caller; 84 void* caller;
85 display_xine_frame_t frameDis; 85 display_xine_frame_t frameDis;
86}; 86};
87 87
88typedef struct opie_frame_s opie_frame_t; 88typedef struct opie_frame_s opie_frame_t;
89struct opie_frame_s { 89struct opie_frame_s {
90 vo_frame_t frame; 90 vo_frame_t frame;
91 91
92 int format; 92 int format;
93 int flags; 93 int flags;
94 94
95 vo_scale_t sc; 95 vo_scale_t sc;
96 96
97 uint8_t *chunk[3]; 97 uint8_t *chunk[3];
98 98
99 uint8_t *data; /* rgb */ 99 uint8_t *data; /* rgb */
100 int bytes_per_line; 100 int bytes_per_line;
101 101
102 yuv2rgb_t *yuv2rgb; 102 yuv2rgb_t *yuv2rgb;
103 uint8_t *rgb_dst; 103 uint8_t *rgb_dst;
104 int yuv_stride; 104 int yuv_stride;
105 int stripe_height, stripe_inc; 105 int stripe_height, stripe_inc;
106 106
107 null_driver_t *output; 107 null_driver_t *output;
108}; 108};
109 109
110static uint32_t null_get_capabilities( xine_vo_driver_t *self ){ 110static uint32_t null_get_capabilities( xine_vo_driver_t *self ){
111 null_driver_t* this = (null_driver_t*)self; 111 null_driver_t* this = (null_driver_t*)self;
112 return this->m_capabilities; 112 return this->m_capabilities;
113} 113}
114 114
115static void null_frame_copy (vo_frame_t *vo_img, uint8_t **src) { 115static void null_frame_copy (vo_frame_t *vo_img, uint8_t **src) {
116 opie_frame_t *frame = (opie_frame_t *) vo_img ; 116 opie_frame_t *frame = (opie_frame_t *) vo_img ;
117 117
118 if (!frame->output->m_show_video) { 118 if (!frame->output->m_show_video) {
119 /* printf("nullvideo: no video\n"); */ 119 /* printf("nullvideo: no video\n"); */
120 return; 120 return;
121 } 121 }
122 122
123 if (frame->format == XINE_IMGFMT_YV12) { 123 if (frame->format == XINE_IMGFMT_YV12) {
124 frame->yuv2rgb->yuv2rgb_fun (frame->yuv2rgb, frame->rgb_dst, 124 frame->yuv2rgb->yuv2rgb_fun (frame->yuv2rgb, frame->rgb_dst,
125 src[0], src[1], src[2]); 125 src[0], src[1], src[2]);
126 } else { 126 } else {
127 127
128 frame->yuv2rgb->yuy22rgb_fun (frame->yuv2rgb, frame->rgb_dst, 128 frame->yuv2rgb->yuy22rgb_fun (frame->yuv2rgb, frame->rgb_dst,
129 src[0]); 129 src[0]);
130 } 130 }
131 131
132 frame->rgb_dst += frame->stripe_inc; 132 frame->rgb_dst += frame->stripe_inc;
133} 133}
134 134
135static void null_frame_field (vo_frame_t *vo_img, int which_field) { 135static void null_frame_field (vo_frame_t *vo_img, int which_field) {
136 136
137 opie_frame_t *frame = (opie_frame_t *) vo_img ; 137 opie_frame_t *frame = (opie_frame_t *) vo_img ;
138 138
139 switch (which_field) { 139 switch (which_field) {
140 case VO_TOP_FIELD: 140 case VO_TOP_FIELD:
141 frame->rgb_dst = (uint8_t *)frame->data; 141 frame->rgb_dst = (uint8_t *)frame->data;
142 frame->stripe_inc = 2*frame->stripe_height * frame->bytes_per_line; 142 frame->stripe_inc = 2*frame->stripe_height * frame->bytes_per_line;
143 break; 143 break;
144 case VO_BOTTOM_FIELD: 144 case VO_BOTTOM_FIELD:
145 frame->rgb_dst = (uint8_t *)frame->data + frame->bytes_per_line ; 145 frame->rgb_dst = (uint8_t *)frame->data + frame->bytes_per_line ;
146 frame->stripe_inc = 2*frame->stripe_height * frame->bytes_per_line; 146 frame->stripe_inc = 2*frame->stripe_height * frame->bytes_per_line;
147 break; 147 break;
148 case VO_BOTH_FIELDS: 148 case VO_BOTH_FIELDS:
149 frame->rgb_dst = (uint8_t *)frame->data; 149 frame->rgb_dst = (uint8_t *)frame->data;
150 break; 150 break;
151 } 151 }
152} 152}
153 153
154 154
155/* take care of the frame*/ 155/* take care of the frame*/
156static void null_frame_dispose( vo_frame_t* vo_img){ 156static void null_frame_dispose( vo_frame_t* vo_img){
157 opie_frame_t* frame = (opie_frame_t*)vo_img; 157 opie_frame_t* frame = (opie_frame_t*)vo_img;
158 158
159 if (frame->data) 159 if (frame->data)
160 free( frame->data ); 160 free( frame->data );
161 free (frame); 161 free (frame);
162} 162}
163 163
164/* end take care of frames*/ 164/* end take care of frames*/
165 165
166static vo_frame_t* null_alloc_frame( xine_vo_driver_t* self ){ 166static vo_frame_t* null_alloc_frame( xine_vo_driver_t* self ){
167 167
168 null_driver_t* this = (null_driver_t*)self; 168 null_driver_t* this = (null_driver_t*)self;
169 opie_frame_t* frame; 169 opie_frame_t* frame;
170 170
171#ifdef LOG 171#ifdef LOG
172 fprintf (stderr, "nullvideo: alloc_frame\n"); 172 fprintf (stderr, "nullvideo: alloc_frame\n");
173#endif 173#endif
174 174
175 frame = (opie_frame_t*)malloc ( sizeof(opie_frame_t) ); 175 frame = (opie_frame_t*)malloc ( sizeof(opie_frame_t) );
176 176
177 memset( frame, 0, sizeof( opie_frame_t) ); 177 memset( frame, 0, sizeof( opie_frame_t) );
178 memcpy (&frame->sc, &this->sc, sizeof(vo_scale_t)); 178 memcpy (&frame->sc, &this->sc, sizeof(vo_scale_t));
179 179
180 pthread_mutex_init (&frame->frame.mutex, NULL); 180 pthread_mutex_init (&frame->frame.mutex, NULL);
181 181
182 frame->output = this; 182 frame->output = this;
183 183
184 /* initialize the frame*/ 184 /* initialize the frame*/
185 frame->frame.driver = self; 185 frame->frame.driver = self;
186 frame->frame.copy = null_frame_copy; 186 frame->frame.copy = null_frame_copy;
187 frame->frame.field = null_frame_field; 187 frame->frame.field = null_frame_field;
188 frame->frame.dispose = null_frame_dispose; 188 frame->frame.dispose = null_frame_dispose;
189 189
190 /* 190 /*
191 * colorspace converter for this frame 191 * colorspace converter for this frame
192 */ 192 */
193 frame->yuv2rgb = this->yuv2rgb_factory->create_converter (this->yuv2rgb_factory); 193 frame->yuv2rgb = this->yuv2rgb_factory->create_converter (this->yuv2rgb_factory);
194 194
195 return (vo_frame_t*) frame; 195 return (vo_frame_t*) frame;
196} 196}
197 197
198static void null_update_frame_format( xine_vo_driver_t* self, vo_frame_t* img, 198static void null_update_frame_format( xine_vo_driver_t* self, vo_frame_t* img,
199 uint32_t width, uint32_t height, 199 uint32_t width, uint32_t height,
200 int ratio_code, int format, int flags ){ 200 int ratio_code, int format, int flags ){
201 null_driver_t* this = (null_driver_t*) self; 201 null_driver_t* this = (null_driver_t*) self;
202 opie_frame_t* frame = (opie_frame_t*)img; 202 opie_frame_t* frame = (opie_frame_t*)img;
203 /* not needed now */ 203 /* not needed now */
204 204
205#ifdef LOG 205#ifdef LOG
206 fprintf (stderr, "nullvideo: update_frame_format\n"); 206 fprintf (stderr, "nullvideo: update_frame_format\n");
207#endif 207#endif
208 208
209 flags &= VO_BOTH_FIELDS; 209 flags &= VO_BOTH_FIELDS;
210 210
211 /* find out if we need to adapt this frame */ 211 /* find out if we need to adapt this frame */
212 212
213 if ((width != frame->sc.delivered_width) 213 if ((width != frame->sc.delivered_width)
214 || (height != frame->sc.delivered_height) 214 || (height != frame->sc.delivered_height)
215 || (ratio_code != frame->sc.delivered_ratio_code) 215 || (ratio_code != frame->sc.delivered_ratio_code)
216 || (flags != frame->flags) 216 || (flags != frame->flags)
217 || (format != frame->format) 217 || (format != frame->format)
218 || (this->sc.user_ratio != frame->sc.user_ratio) 218 || (this->sc.user_ratio != frame->sc.user_ratio)
219 || (this->gui_width != frame->sc.gui_width) 219 || (this->gui_width != frame->sc.gui_width)
220 || (this->gui_height != frame->sc.gui_height)) { 220 || (this->gui_height != frame->sc.gui_height)) {
221 221
222 frame->sc.delivered_width = width; 222 frame->sc.delivered_width = width;
223 frame->sc.delivered_height = height; 223 frame->sc.delivered_height = height;
224 frame->sc.delivered_ratio_code = ratio_code; 224 frame->sc.delivered_ratio_code = ratio_code;
225 frame->flags = flags; 225 frame->flags = flags;
226 frame->format = format; 226 frame->format = format;
227 frame->sc.user_ratio = this->sc.user_ratio; 227 frame->sc.user_ratio = this->sc.user_ratio;
228 frame->sc.gui_width = this->gui_width; 228 frame->sc.gui_width = this->gui_width;
229 frame->sc.gui_height = this->gui_height; 229 frame->sc.gui_height = this->gui_height;
230 frame->sc.gui_pixel_aspect = 1.0; 230 frame->sc.gui_pixel_aspect = 1.0;
231 231
232 vo_scale_compute_ideal_size ( &frame->sc ); 232 vo_scale_compute_ideal_size ( &frame->sc );
233 vo_scale_compute_output_size( &frame->sc ); 233 vo_scale_compute_output_size( &frame->sc );
234 234
235 #ifdef LOG 235#ifdef LOG
236 fprintf (stderr, "nullvideo: gui %dx%d delivered %dx%d output %dx%d\n", 236 fprintf (stderr, "nullvideo: gui %dx%d delivered %dx%d output %dx%d\n",
237 frame->sc.gui_width, frame->sc.gui_height, 237 frame->sc.gui_width, frame->sc.gui_height,
238 frame->sc.delivered_width, frame->sc.delivered_height, 238 frame->sc.delivered_width, frame->sc.delivered_height,
239 frame->sc.output_width, frame->sc.output_height); 239 frame->sc.output_width, frame->sc.output_height);
240#endif 240#endif
241 241
242 /* 242 /*
243 * (re-) allocate 243 * (re-) allocate
244 */ 244 */
245 if( frame->data ) { 245 if( frame->data ) {
246 if( frame->chunk[0] ){ 246 if( frame->chunk[0] ){
247 free( frame->chunk[0] ); 247 free( frame->chunk[0] );
248 frame->chunk[0] = NULL; 248 frame->chunk[0] = NULL;
249 } 249 }
250 if( frame->chunk[1] ){ 250 if( frame->chunk[1] ){
251 free ( frame->chunk[1] ); 251 free ( frame->chunk[1] );
252 frame->chunk[1] = NULL; 252 frame->chunk[1] = NULL;
253 } 253 }
254 if( frame->chunk[2] ){ 254 if( frame->chunk[2] ){
255 free ( frame->chunk[2] ); 255 free ( frame->chunk[2] );
256 frame->chunk[2] = NULL; 256 frame->chunk[2] = NULL;
257 } 257 }
258 free ( frame->data ); 258 free ( frame->data );
259 } 259 }
260 260
261 frame->data = xine_xmalloc (frame->sc.output_width 261 frame->data = xine_xmalloc (frame->sc.output_width
262 * frame->sc.output_height 262 * frame->sc.output_height
263 * this->bytes_per_pixel ); 263 * this->bytes_per_pixel );
264 264
265 if( format == XINE_IMGFMT_YV12 ) { 265 if( format == XINE_IMGFMT_YV12 ) {
266 frame->frame.pitches[0] = 8*((width + 7) / 8); 266 frame->frame.pitches[0] = 8*((width + 7) / 8);
267 frame->frame.pitches[1] = 8*((width + 15) / 16); 267 frame->frame.pitches[1] = 8*((width + 15) / 16);
268 frame->frame.pitches[2] = 8*((width + 15) / 16); 268 frame->frame.pitches[2] = 8*((width + 15) / 16);
269 frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height,(void **)&frame->chunk[0]); 269 frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height,(void **)&frame->chunk[0]);
270 frame->frame.base[1] = xine_xmalloc_aligned (16, frame->frame.pitches[1] * ((height+ 1)/2), (void **)&frame->chunk[1]); 270 frame->frame.base[1] = xine_xmalloc_aligned (16, frame->frame.pitches[1] * ((height+ 1)/2), (void **)&frame->chunk[1]);
271 frame->frame.base[2] = xine_xmalloc_aligned (16, frame->frame.pitches[2] * ((height+ 1)/2), (void **)&frame->chunk[2]); 271 frame->frame.base[2] = xine_xmalloc_aligned (16, frame->frame.pitches[2] * ((height+ 1)/2), (void **)&frame->chunk[2]);
272 272
273 }else{ 273 }else{
274 frame->frame.pitches[0] = 8*((width + 3) / 4); 274 frame->frame.pitches[0] = 8*((width + 3) / 4);
275 275
276 frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height, 276 frame->frame.base[0] = xine_xmalloc_aligned (16, frame->frame.pitches[0] * height,
277 (void **)&frame->chunk[0]); 277 (void **)&frame->chunk[0]);
278 frame->chunk[1] = NULL; 278 frame->chunk[1] = NULL;
279 frame->chunk[2] = NULL; 279 frame->chunk[2] = NULL;
280 } 280 }
281 281
282 frame->stripe_height = 16 * frame->sc.output_height / frame->sc.delivered_height; 282 frame->stripe_height = 16 * frame->sc.output_height / frame->sc.delivered_height;
283 frame->bytes_per_line = frame->sc.output_width * this->bytes_per_pixel; 283 frame->bytes_per_line = frame->sc.output_width * this->bytes_per_pixel;
284 284
285 /* 285 /*
286 * set up colorspace converter 286 * set up colorspace converter
287 */ 287 */
288 288
289 switch (flags) { 289 switch (flags) {
290 case VO_TOP_FIELD: 290 case VO_TOP_FIELD:
291 case VO_BOTTOM_FIELD: 291 case VO_BOTTOM_FIELD:
292 frame->yuv2rgb->configure (frame->yuv2rgb, 292 frame->yuv2rgb->configure (frame->yuv2rgb,
293 frame->sc.delivered_width, 293 frame->sc.delivered_width,
294 16, 294 16,
295 2*frame->frame.pitches[0], 295 2*frame->frame.pitches[0],
296 2*frame->frame.pitches[1], 296 2*frame->frame.pitches[1],
297 frame->sc.output_width, 297 frame->sc.output_width,
298 frame->stripe_height, 298 frame->stripe_height,
299 frame->bytes_per_line*2); 299 frame->bytes_per_line*2);
300 frame->yuv_stride = frame->bytes_per_line*2; 300 frame->yuv_stride = frame->bytes_per_line*2;
301 break; 301 break;
302 case VO_BOTH_FIELDS: 302 case VO_BOTH_FIELDS:
303 frame->yuv2rgb->configure (frame->yuv2rgb, 303 frame->yuv2rgb->configure (frame->yuv2rgb,
304 frame->sc.delivered_width, 304 frame->sc.delivered_width,
305 16, 305 16,
306 frame->frame.pitches[0], 306 frame->frame.pitches[0],
307 frame->frame.pitches[1], 307 frame->frame.pitches[1],
308 frame->sc.output_width, 308 frame->sc.output_width,
309 frame->stripe_height, 309 frame->stripe_height,
310 frame->bytes_per_line); 310 frame->bytes_per_line);
311 frame->yuv_stride = frame->bytes_per_line; 311 frame->yuv_stride = frame->bytes_per_line;
312 break; 312 break;
313 } 313 }
314#ifdef LOG 314#ifdef LOG
315 fprintf (stderr, "nullvideo: colorspace converter configured.\n"); 315 fprintf (stderr, "nullvideo: colorspace converter configured.\n");
316#endif 316#endif
317 } 317 }
318 318
319 /* 319 /*
320 * reset dest pointers 320 * reset dest pointers
321 */ 321 */
322 322
323 if (frame->data) { 323 if (frame->data) {
324 switch (flags) { 324 switch (flags) {
325 case VO_TOP_FIELD: 325 case VO_TOP_FIELD:
326 frame->rgb_dst = (uint8_t *)frame->data; 326 frame->rgb_dst = (uint8_t *)frame->data;
327 frame->stripe_inc = 2 * frame->stripe_height * frame->bytes_per_line; 327 frame->stripe_inc = 2 * frame->stripe_height * frame->bytes_per_line;
328 break; 328 break;
329 case VO_BOTTOM_FIELD: 329 case VO_BOTTOM_FIELD:
330 frame->rgb_dst = (uint8_t *)frame->data + frame->bytes_per_line ; 330 frame->rgb_dst = (uint8_t *)frame->data + frame->bytes_per_line ;
331 frame->stripe_inc = 2 * frame->stripe_height * frame->bytes_per_line; 331 frame->stripe_inc = 2 * frame->stripe_height * frame->bytes_per_line;
332 break; 332 break;
333 case VO_BOTH_FIELDS: 333 case VO_BOTH_FIELDS:
334 frame->rgb_dst = (uint8_t *)frame->data; 334 frame->rgb_dst = (uint8_t *)frame->data;
335 frame->stripe_inc = frame->stripe_height * frame->bytes_per_line; 335 frame->stripe_inc = frame->stripe_height * frame->bytes_per_line;
336 break; 336 break;
337 } 337 }
338 } 338 }
339} 339}
340 340
341static void null_display_frame( xine_vo_driver_t* self, vo_frame_t *frame_gen ){ 341static void null_display_frame( xine_vo_driver_t* self, vo_frame_t *frame_gen ){
342 null_driver_t* this = (null_driver_t*) self; 342 null_driver_t* this = (null_driver_t*) self;
343 opie_frame_t* frame = (opie_frame_t*)frame_gen; 343 opie_frame_t* frame = (opie_frame_t*)frame_gen;
344 display_xine_frame_t display = this->frameDis; 344 display_xine_frame_t display = this->frameDis;
345 345
346 if (!this->m_show_video) 346 if (!this->m_show_video)
347 return; 347 return;
348 348
349 if( display != NULL ) { 349 if( display != NULL ) {
350 (*display)(this->caller, frame->data, 350 (*display)(this->caller, frame->data,
351 frame->sc.output_width, frame->sc.output_height, 351 frame->sc.output_width, frame->sc.output_height,
352 frame->bytes_per_line ); 352 frame->bytes_per_line );
353 } 353 }
354 354
355 frame->frame.displayed (&frame->frame); 355 frame->frame.displayed (&frame->frame);
356} 356}
357 357
358 358
359/* blending related */ 359/* blending related */
360static void null_overlay_clut_yuv2rgb (null_driver_t *this, 360static void null_overlay_clut_yuv2rgb (null_driver_t *this,
361 vo_overlay_t *overlay, 361 vo_overlay_t *overlay,
362 opie_frame_t *frame) { 362 opie_frame_t *frame) {
363 int i; 363 int i;
364 clut_t* clut = (clut_t*) overlay->color; 364 clut_t* clut = (clut_t*) overlay->color;
365 if (!overlay->rgb_clut) { 365 if (!overlay->rgb_clut) {
366 for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) { 366 for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) {
367 *((uint32_t *)&clut[i]) = 367 *((uint32_t *)&clut[i]) =
368 frame->yuv2rgb->yuv2rgb_single_pixel_fun (frame->yuv2rgb, 368 frame->yuv2rgb->yuv2rgb_single_pixel_fun (frame->yuv2rgb,
369 clut[i].y, clut[i].cb, clut[i].cr); 369 clut[i].y, clut[i].cb, clut[i].cr);
370 } 370 }
371 overlay->rgb_clut++; 371 overlay->rgb_clut++;
372 } 372 }
373 if (!overlay->clip_rgb_clut) { 373 if (!overlay->clip_rgb_clut) {
374 clut = (clut_t*) overlay->clip_color; 374 clut = (clut_t*) overlay->clip_color;
375 for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) { 375 for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) {
376 *((uint32_t *)&clut[i]) = 376 *((uint32_t *)&clut[i]) =
377 frame->yuv2rgb->yuv2rgb_single_pixel_fun(frame->yuv2rgb, 377 frame->yuv2rgb->yuv2rgb_single_pixel_fun(frame->yuv2rgb,
378 clut[i].y, clut[i].cb, clut[i].cr); 378 clut[i].y, clut[i].cb, clut[i].cr);
379 } 379 }
380 overlay->clip_rgb_clut++; 380 overlay->clip_rgb_clut++;
381 } 381 }
382} 382}
383 383
384static void null_overlay_blend ( xine_vo_driver_t *this_gen, vo_frame_t *frame_gen, vo_overlay_t *overlay) { 384static void null_overlay_blend ( xine_vo_driver_t *this_gen, vo_frame_t *frame_gen, vo_overlay_t *overlay) {
385 null_driver_t *this = (null_driver_t *) this_gen; 385 null_driver_t *this = (null_driver_t *) this_gen;
386 opie_frame_t *frame = (opie_frame_t *) frame_gen; 386 opie_frame_t *frame = (opie_frame_t *) frame_gen;
387 387
388 if(!this->m_show_video || frame->sc.output_width == 0 388 if(!this->m_show_video || frame->sc.output_width == 0
389 || frame->sc.output_height== 0) 389 || frame->sc.output_height== 0)
390 return; 390 return;
391 391
392 /* Alpha Blend here */ 392 /* Alpha Blend here */
393 if (overlay->rle) { 393 if (overlay->rle) {
394 if( !overlay->rgb_clut || !overlay->clip_rgb_clut) 394 if( !overlay->rgb_clut || !overlay->clip_rgb_clut)
395 null_overlay_clut_yuv2rgb(this,overlay,frame); 395 null_overlay_clut_yuv2rgb(this,overlay,frame);
396 396
397 switch(this->bpp) { 397 switch(this->bpp) {
398 case 16: 398 case 16:
399 blend_rgb16( (uint8_t *)frame->data, overlay, 399 blend_rgb16( (uint8_t *)frame->data, overlay,
400 frame->sc.output_width, frame->sc.output_height, 400 frame->sc.output_width, frame->sc.output_height,
401 frame->sc.delivered_width, frame->sc.delivered_height); 401 frame->sc.delivered_width, frame->sc.delivered_height);
402 break; 402 break;
403 case 24: 403 case 24:
404 blend_rgb24( (uint8_t *)frame->data, overlay, 404 blend_rgb24( (uint8_t *)frame->data, overlay,
405 frame->sc.output_width, frame->sc.output_height, 405 frame->sc.output_width, frame->sc.output_height,
406 frame->sc.delivered_width, frame->sc.delivered_height); 406 frame->sc.delivered_width, frame->sc.delivered_height);
407 break; 407 break;
408 case 32: 408 case 32:
409 blend_rgb32( (uint8_t *)frame->data, overlay, 409 blend_rgb32( (uint8_t *)frame->data, overlay,
410 frame->sc.output_width, frame->sc.output_height, 410 frame->sc.output_width, frame->sc.output_height,
411 frame->sc.delivered_width, frame->sc.delivered_height); 411 frame->sc.delivered_width, frame->sc.delivered_height);
412 break; 412 break;
413 default: 413 default:
414 /* It should never get here */ 414 /* It should never get here */
415 break; 415 break;
416 } 416 }
417 } 417 }
418} 418}
419 419
420 420
421static int null_get_property( xine_vo_driver_t* self, 421static int null_get_property( xine_vo_driver_t* self,
422 int property ){ 422 int property ){
423 return 0; 423 return 0;
424} 424}
425static int null_set_property( xine_vo_driver_t* self, 425static int null_set_property( xine_vo_driver_t* self,
426 int property, 426 int property,
427 int value ){ 427 int value ){
428 return value; 428 return value;
429} 429}
430static void null_get_property_min_max( xine_vo_driver_t* self, 430static void null_get_property_min_max( xine_vo_driver_t* self,
431 int property, int *min, 431 int property, int *min,
432 int *max ){ 432 int *max ){
433 *max = 0; 433 *max = 0;
434 *min = 0; 434 *min = 0;
435} 435}
436static int null_gui_data_exchange( xine_vo_driver_t* self, 436static int null_gui_data_exchange( xine_vo_driver_t* self,
437 int data_type, 437 int data_type,
438 void *data ){ 438 void *data ){
439 return 0; 439 return 0;
440} 440}
441 441
442static void null_dispose ( xine_vo_driver_t* self ){ 442static void null_dispose ( xine_vo_driver_t* self ){
443 null_driver_t* this = (null_driver_t*)self; 443 null_driver_t* this = (null_driver_t*)self;
444 free ( this ); 444 free ( this );
445} 445}
446static int null_redraw_needed( xine_vo_driver_t* self ){ 446static int null_redraw_needed( xine_vo_driver_t* self ){
447 return 0; 447 return 0;
448} 448}
449 449
450 450
451xine_vo_driver_t* init_video_out_plugin( config_values_t* conf, 451xine_vo_driver_t* init_video_out_plugin( config_values_t* conf,
452 void* video ){ 452 void* video ){
453 null_driver_t *vo; 453 null_driver_t *vo;
454 vo = (null_driver_t*)malloc( sizeof(null_driver_t ) ); 454 vo = (null_driver_t*)malloc( sizeof(null_driver_t ) );
455 455
456 /* memset? */ 456 /* memset? */
457 memset(vo,0, sizeof(null_driver_t ) ); 457 memset(vo,0, sizeof(null_driver_t ) );
458 458
459 vo_scale_init (&vo->sc, 0, 0); 459 vo_scale_init (&vo->sc, 0, 0);
460 460
461 vo->sc.gui_pixel_aspect = 1.0; 461 vo->sc.gui_pixel_aspect = 1.0;
462 462
463 vo->m_show_video = 0; // false 463 vo->m_show_video = 0; // false
464 vo->m_video_fullscreen = 0; 464 vo->m_video_fullscreen = 0;
465 vo->m_is_scaling = 0; 465 vo->m_is_scaling = 0;
466 vo->display_ratio = 1.0; 466 vo->display_ratio = 1.0;
467 vo->gui_width = 16; 467 vo->gui_width = 16;
468 vo->gui_height = 8; 468 vo->gui_height = 8;
469 vo->frameDis = NULL; 469 vo->frameDis = NULL;
470 470
471 /* install callback handlers*/ 471 /* install callback handlers*/
472 vo->vo_driver.get_capabilities = null_get_capabilities; 472 vo->vo_driver.get_capabilities = null_get_capabilities;
473 vo->vo_driver.alloc_frame = null_alloc_frame; 473 vo->vo_driver.alloc_frame = null_alloc_frame;
474 vo->vo_driver.update_frame_format = null_update_frame_format; 474 vo->vo_driver.update_frame_format = null_update_frame_format;
475 vo->vo_driver.display_frame = null_display_frame; 475 vo->vo_driver.display_frame = null_display_frame;
476 vo->vo_driver.overlay_blend = null_overlay_blend; 476 vo->vo_driver.overlay_blend = null_overlay_blend;
477 vo->vo_driver.get_property = null_get_property; 477 vo->vo_driver.get_property = null_get_property;
478 vo->vo_driver.set_property = null_set_property; 478 vo->vo_driver.set_property = null_set_property;
479 vo->vo_driver.get_property_min_max = null_get_property_min_max; 479 vo->vo_driver.get_property_min_max = null_get_property_min_max;
480 vo->vo_driver.gui_data_exchange = null_gui_data_exchange; 480 vo->vo_driver.gui_data_exchange = null_gui_data_exchange;
481 vo->vo_driver.dispose = null_dispose; 481 vo->vo_driver.dispose = null_dispose;
482 vo->vo_driver.redraw_needed = null_redraw_needed; 482 vo->vo_driver.redraw_needed = null_redraw_needed;
483 483
484 484
485 /* capabilities */ 485 /* capabilities */
486 vo->m_capabilities = VO_CAP_COPIES_IMAGE | VO_CAP_YUY2 | VO_CAP_YV12; 486 vo->m_capabilities = VO_CAP_COPIES_IMAGE | VO_CAP_YUY2 | VO_CAP_YV12;
487 vo->yuv2rgb_factory = yuv2rgb_factory_init (MODE_16_RGB, vo->yuv2rgb_swap, 487 vo->yuv2rgb_factory = yuv2rgb_factory_init (MODE_16_RGB, vo->yuv2rgb_swap,
488 vo->yuv2rgb_cmap); 488 vo->yuv2rgb_cmap);
489 489
490 return ( xine_vo_driver_t*) vo; 490 return ( xine_vo_driver_t*) vo;
491} 491}
492 492
493#if 0 493#if 0
494static vo_info_t vo_info_null = { 494static vo_info_t vo_info_null = {
495 5, 495 5,
496 XINE_VISUAL_TYPE_FB 496 XINE_VISUAL_TYPE_FB
497}; 497};
498 498
499vo_info_t *get_video_out_plugin_info(){ 499vo_info_t *get_video_out_plugin_info(){
500 vo_info_null.description = ("xine video output plugin using null device"); 500 vo_info_null.description = ("xine video output plugin using null device");
501 return &vo_info_null; 501 return &vo_info_null;
502} 502}
503 503
504#endif 504#endif
505 505
506/* this is special for this device */ 506/* this is special for this device */
507/** 507/**
508 * We know that we will be controled by the XINE LIB++ 508 * We know that we will be controled by the XINE LIB++
509 */ 509 */
510 510
511/** 511/**
512 * 512 *
513 */ 513 */
514int null_is_showing_video( xine_vo_driver_t* self ){ 514int null_is_showing_video( xine_vo_driver_t* self ){
515 null_driver_t* this = (null_driver_t*)self; 515 null_driver_t* this = (null_driver_t*)self;
516 return this->m_show_video; 516 return this->m_show_video;
517} 517}
518void null_set_show_video( xine_vo_driver_t* self, int show ) { 518void null_set_show_video( xine_vo_driver_t* self, int show ) {
519 ((null_driver_t*)self)->m_show_video = show; 519 ((null_driver_t*)self)->m_show_video = show;
520} 520}
521 521
522int null_is_fullscreen( xine_vo_driver_t* self ){ 522int null_is_fullscreen( xine_vo_driver_t* self ){
523 return ((null_driver_t*)self)->m_video_fullscreen; 523 return ((null_driver_t*)self)->m_video_fullscreen;
524} 524}
525void null_set_fullscreen( xine_vo_driver_t* self, int screen ){ 525void null_set_fullscreen( xine_vo_driver_t* self, int screen ){
526 ((null_driver_t*)self)->m_video_fullscreen = screen; 526 ((null_driver_t*)self)->m_video_fullscreen = screen;
527} 527}
528int null_is_scaling( xine_vo_driver_t* self ){ 528int null_is_scaling( xine_vo_driver_t* self ){
529 return ((null_driver_t*)self)->m_is_scaling; 529 return ((null_driver_t*)self)->m_is_scaling;
530} 530}
531 531
532void null_set_videoGamma( xine_vo_driver_t* self , int value ) { 532void null_set_videoGamma( xine_vo_driver_t* self , int value ) {
533 ((null_driver_t*) self) ->yuv2rgb_gamma = value; 533 ((null_driver_t*) self) ->yuv2rgb_gamma = value;
534 ((null_driver_t*) self) ->yuv2rgb_factory->set_gamma( ((null_driver_t*) self) ->yuv2rgb_factory, value ); 534 ((null_driver_t*) self) ->yuv2rgb_factory->set_gamma( ((null_driver_t*) self) ->yuv2rgb_factory, value );
535} 535}
536 536
537void null_set_scaling( xine_vo_driver_t* self, int scale ) { 537void null_set_scaling( xine_vo_driver_t* self, int scale ) {
538 ((null_driver_t*)self)->m_is_scaling = scale; 538 ((null_driver_t*)self)->m_is_scaling = scale;
539} 539}
540 540
541void null_set_gui_width( xine_vo_driver_t* self, int width ) { 541void null_set_gui_width( xine_vo_driver_t* self, int width ) {
542 ((null_driver_t*)self)->gui_width = width; 542 ((null_driver_t*)self)->gui_width = width;
543} 543}
544void null_set_gui_height( xine_vo_driver_t* self, int height ) { 544void null_set_gui_height( xine_vo_driver_t* self, int height ) {
545 ((null_driver_t*)self)->gui_height = height; 545 ((null_driver_t*)self)->gui_height = height;
546} 546}
547 547
548 548
549void null_set_mode( xine_vo_driver_t* self, int depth, int rgb ) { 549void null_set_mode( xine_vo_driver_t* self, int depth, int rgb ) {
550 null_driver_t* this = (null_driver_t*)self; 550 null_driver_t* this = (null_driver_t*)self;
551 551
552 this->bytes_per_pixel = (depth + 7 ) / 8; 552 this->bytes_per_pixel = (depth + 7 ) / 8;
553 this->bpp = this->bytes_per_pixel * 8; 553 this->bpp = this->bytes_per_pixel * 8;
554 this->depth = depth; 554 this->depth = depth;
555 printf("depth %d %d\n", depth, this->bpp); 555 printf("depth %d %d\n", depth, this->bpp);
556 printf("pixeltype %d\n", rgb ); 556 printf("pixeltype %d\n", rgb );
557 switch ( this->depth ) { 557 switch ( this->depth ) {
558 case 32: 558 case 32:
559 if( rgb == 0 ) 559 if( rgb == 0 )
560 this->yuv2rgb_mode = MODE_32_RGB; 560 this->yuv2rgb_mode = MODE_32_RGB;
561 else 561 else
562 this->yuv2rgb_mode = MODE_32_BGR; 562 this->yuv2rgb_mode = MODE_32_BGR;
563 case 24: 563 case 24:
564 if( this->bpp == 32 ) { 564 if( this->bpp == 32 ) {
565 if( rgb == 0 ) { 565 if( rgb == 0 ) {
566 this->yuv2rgb_mode = MODE_32_RGB; 566 this->yuv2rgb_mode = MODE_32_RGB;
567 } else { 567 } else {
568 this->yuv2rgb_mode = MODE_32_BGR; 568 this->yuv2rgb_mode = MODE_32_BGR;
569 } 569 }
570 }else{ 570 }else{
571 if( rgb == 0 ) 571 if( rgb == 0 )
572 this->yuv2rgb_mode = MODE_24_RGB; 572 this->yuv2rgb_mode = MODE_24_RGB;
573 else 573 else
574 this->yuv2rgb_mode = MODE_24_BGR; 574 this->yuv2rgb_mode = MODE_24_BGR;
575 }; 575 };
576 break; 576 break;
577 case 16: 577 case 16:
578 if( rgb == 0 ) { 578 if( rgb == 0 ) {
579 this->yuv2rgb_mode = MODE_16_RGB; 579 this->yuv2rgb_mode = MODE_16_RGB;
580 } else { 580 } else {
581 this->yuv2rgb_mode = MODE_16_BGR; 581 this->yuv2rgb_mode = MODE_16_BGR;
582 } 582 }
583 break; 583 break;
584 case 15: 584 case 15:
585 if( rgb == 0 ) { 585 if( rgb == 0 ) {
586 this->yuv2rgb_mode = MODE_15_RGB; 586 this->yuv2rgb_mode = MODE_15_RGB;
587 } else { 587 } else {
588 this->yuv2rgb_mode = MODE_15_BGR; 588 this->yuv2rgb_mode = MODE_15_BGR;
589 } 589 }
590 break; 590 break;
591 case 8: 591 case 8:
592 if( rgb == 0 ) { 592 if( rgb == 0 ) {
593 this->yuv2rgb_mode = MODE_8_RGB; 593 this->yuv2rgb_mode = MODE_8_RGB;
594 } else { 594 } else {
595 this->yuv2rgb_mode = MODE_8_BGR; 595 this->yuv2rgb_mode = MODE_8_BGR;
596 } 596 }
597 break; 597 break;
598 }; 598 };
599 //free(this->yuv2rgb_factory ); 599 //free(this->yuv2rgb_factory );
600 // this->yuv2rgb_factory = yuv2rgb_factory_init (this->yuv2rgb_mode, this->yuv2rgb_swap, 600 // this->yuv2rgb_factory = yuv2rgb_factory_init (this->yuv2rgb_mode, this->yuv2rgb_swap,
601 // this->yuv2rgb_cmap); 601 // this->yuv2rgb_cmap);
602}; 602};
603 603
604void null_display_handler( xine_vo_driver_t* self, display_xine_frame_t t, 604void null_display_handler( xine_vo_driver_t* self, display_xine_frame_t t,
605 void* user_data ) { 605 void* user_data ) {
606 null_driver_t* this = (null_driver_t*) self; 606 null_driver_t* this = (null_driver_t*) self;
607 this->caller = user_data; 607 this->caller = user_data;
608 this->frameDis = t; 608 this->frameDis = t;
609} 609}
610 610
diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp
index 040ef71..8e88e9b 100644
--- a/noncore/multimedia/opieplayer2/playlistwidget.cpp
+++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp
@@ -746,100 +746,97 @@ void PlayListWidget::openFile() {
746 m3uFile=filename; 746 m3uFile=filename;
747 } 747 }
748 748
749// qDebug("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"+ m3uFile); 749// qDebug("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"+ m3uFile);
750 lnk.setName( filename ); //sets name 750 lnk.setName( filename ); //sets name
751 lnk.setFile( filename ); //sets file name 751 lnk.setFile( filename ); //sets file name
752 752
753// lnk.setIcon("opieplayer2/musicfile"); 753// lnk.setIcon("opieplayer2/musicfile");
754 754
755 d->selectedFiles->addToSelection( lnk ); 755 d->selectedFiles->addToSelection( lnk );
756 writeCurrentM3u(); 756 writeCurrentM3u();
757 d->selectedFiles->setSelectedItem( lnk.name()); 757 d->selectedFiles->setSelectedItem( lnk.name());
758 } 758 }
759 else if( filename.right( 3) == "m3u" ) { 759 else if( filename.right( 3) == "m3u" ) {
760 readm3u( filename ); 760 readm3u( filename );
761 761
762 } else if( filename.right(3) == "pls" ) { 762 } else if( filename.right(3) == "pls" ) {
763 readPls( filename ); 763 readPls( filename );
764 } else { 764 } else {
765 lnk.setName( QFileInfo(filename).baseName() ); //sets name 765 lnk.setName( QFileInfo(filename).baseName() ); //sets name
766 lnk.setFile( filename ); //sets file name 766 lnk.setFile( filename ); //sets file name
767 d->selectedFiles->addToSelection( lnk); 767 d->selectedFiles->addToSelection( lnk);
768 writeCurrentM3u(); 768 writeCurrentM3u();
769 d->selectedFiles->setSelectedItem( lnk.name()); 769 d->selectedFiles->setSelectedItem( lnk.name());
770 } 770 }
771 } 771 }
772 772
773 if( fileDlg ) { 773 if( fileDlg ) {
774 delete fileDlg; 774 delete fileDlg;
775 } 775 }
776} 776}
777 777
778/* 778/*
779reads m3u and shows files/urls to playlist widget */ 779reads m3u and shows files/urls to playlist widget */
780void PlayListWidget::readm3u( const QString &filename ) { 780void PlayListWidget::readm3u( const QString &filename ) {
781 qDebug( "read m3u filename " + filename ); 781 qDebug( "read m3u filename " + filename );
782 782
783 Om3u *m3uList; 783 Om3u *m3uList;
784 QString s, name; 784 QString s, name;
785 m3uList = new Om3u( filename, IO_ReadOnly ); 785 m3uList = new Om3u( filename, IO_ReadOnly );
786 m3uList->readM3u(); 786 m3uList->readM3u();
787 DocLnk lnk; 787 DocLnk lnk;
788 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { 788 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
789 s = *it; 789 s = *it;
790// qDebug("reading "+ s); 790// qDebug("reading "+ s);
791 if(s.left(4)=="http") { 791 if(s.left(4)=="http") {
792 lnk.setName( s ); //sets file name 792 lnk.setName( s ); //sets file name
793 lnk.setIcon("opieplayer2/musicfile"); 793 lnk.setIcon("opieplayer2/musicfile");
794// if(s.right(4) != '.' || s.right(5) != '.') 794 lnk.setFile( s ); //sets file name
795// lnk.setFile( s+"/"); //if url with no extension
796// else
797 lnk.setFile( s ); //sets file name
798 795
799 } else { 796 } else {
800 // if( QFileInfo( s ).exists() ) { 797 // if( QFileInfo( s ).exists() ) {
801 lnk.setName( QFileInfo(s).baseName()); 798 lnk.setName( QFileInfo(s).baseName());
802 // if(s.right(4) == '.') {//if regular file 799 // if(s.right(4) == '.') {//if regular file
803 if(s.left(1) != "/") { 800 if(s.left(1) != "/") {
804 // qDebug("set link "+QFileInfo(filename).dirPath()+"/"+s); 801 // qDebug("set link "+QFileInfo(filename).dirPath()+"/"+s);
805 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s); 802 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s);
806// lnk.setIcon(MimeType(s).pixmap() ); 803// lnk.setIcon(MimeType(s).pixmap() );
807// lnk.setIcon("SoundPlayer"); 804// lnk.setIcon("SoundPlayer");
808 } else { 805 } else {
809 // qDebug("set link2 "+s); 806 // qDebug("set link2 "+s);
810 lnk.setFile( s); 807 lnk.setFile( s);
811// lnk.setIcon(MimeType(s).pixmap() ); 808// lnk.setIcon(MimeType(s).pixmap() );
812// lnk.setIcon("SoundPlayer"); 809// lnk.setIcon("SoundPlayer");
813 } 810 }
814 } 811 }
815 d->selectedFiles->addToSelection( lnk ); 812 d->selectedFiles->addToSelection( lnk );
816 } 813 }
817 Config config( "OpiePlayer" ); 814 Config config( "OpiePlayer" );
818 config.setGroup( "PlayList" ); 815 config.setGroup( "PlayList" );
819 816
820 config.writeEntry("CurrentPlaylist",filename); 817 config.writeEntry("CurrentPlaylist",filename);
821 config.write(); 818 config.write();
822 currentPlayList=filename; 819 currentPlayList=filename;
823 820
824// m3uList->write(); 821// m3uList->write();
825 m3uList->close(); 822 m3uList->close();
826 if(m3uList) delete m3uList; 823 if(m3uList) delete m3uList;
827 824
828 d->selectedFiles->setSelectedItem( s); 825 d->selectedFiles->setSelectedItem( s);
829 setCaption(tr("OpiePlayer: ")+ QFileInfo(filename).baseName()); 826 setCaption(tr("OpiePlayer: ")+ QFileInfo(filename).baseName());
830 827
831} 828}
832 829
833/* 830/*
834reads pls and adds files/urls to playlist */ 831reads pls and adds files/urls to playlist */
835void PlayListWidget::readPls( const QString &filename ) { 832void PlayListWidget::readPls( const QString &filename ) {
836 833
837 qDebug( "pls filename is " + filename ); 834 qDebug( "pls filename is " + filename );
838 Om3u *m3uList; 835 Om3u *m3uList;
839 QString s, name; 836 QString s, name;
840 m3uList = new Om3u( filename, IO_ReadOnly ); 837 m3uList = new Om3u( filename, IO_ReadOnly );
841 m3uList->readPls(); 838 m3uList->readPls();
842 839
843 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { 840 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
844 s = *it; 841 s = *it;
845 // s.replace( QRegExp( "%20" )," " ); 842 // s.replace( QRegExp( "%20" )," " );