-rw-r--r-- | noncore/multimedia/opieplayer2/audiowidget.cpp | 9 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/audiowidget.h | 20 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/nullvideo.c | 142 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.cpp | 5 |
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 | |||
@@ -1,345 +1,350 @@ | |||
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 | #include <qpe/qpeapplication.h> | 34 | #include <qpe/qpeapplication.h> |
35 | #include <qpe/resource.h> | 35 | #include <qpe/resource.h> |
36 | #include <qpe/config.h> | 36 | #include <qpe/config.h> |
37 | #include <opie/oticker.h> | 37 | #include <opie/oticker.h> |
38 | 38 | ||
39 | #include <qwidget.h> | 39 | #include <qwidget.h> |
40 | #include <qpixmap.h> | 40 | #include <qpixmap.h> |
41 | #include <qbutton.h> | 41 | #include <qbutton.h> |
42 | #include <qpainter.h> | 42 | #include <qpainter.h> |
43 | #include <qframe.h> | 43 | #include <qframe.h> |
44 | #include <qlayout.h> | 44 | #include <qlayout.h> |
45 | #include <qdir.h> | 45 | #include <qdir.h> |
46 | #include <stdlib.h> | 46 | #include <stdlib.h> |
47 | #include <stdio.h> | 47 | #include <stdio.h> |
48 | 48 | ||
49 | #include "audiowidget.h" | 49 | #include "audiowidget.h" |
50 | #include "mediaplayerstate.h" | 50 | #include "mediaplayerstate.h" |
51 | #include "playlistwidget.h" | 51 | #include "playlistwidget.h" |
52 | 52 | ||
53 | extern MediaPlayerState *mediaPlayerState; | 53 | extern MediaPlayerState *mediaPlayerState; |
54 | extern PlayListWidget *playList; | 54 | extern PlayListWidget *playList; |
55 | 55 | ||
56 | static const int xo = -2; // movable x offset | 56 | static const int xo = -2; // movable x offset |
57 | static const int yo = 22; // movable y offset | 57 | static const int yo = 22; // movable y offset |
58 | 58 | ||
59 | struct MediaButton { | 59 | struct MediaButton { |
60 | bool isToggle, isHeld, isDown; | 60 | bool isToggle, isHeld, isDown; |
61 | }; | 61 | }; |
62 | 62 | ||
63 | //Layout information for the audioButtons (and if it is a toggle button or not) | 63 | //Layout information for the audioButtons (and if it is a toggle button or not) |
64 | MediaButton audioButtons[] = { | 64 | MediaButton audioButtons[] = { |
65 | { TRUE, FALSE, FALSE }, // play | 65 | { TRUE, FALSE, FALSE }, // play |
66 | { FALSE, FALSE, FALSE }, // stop | 66 | { FALSE, FALSE, FALSE }, // stop |
67 | { FALSE, FALSE, FALSE }, // next | 67 | { FALSE, FALSE, FALSE }, // next |
68 | { FALSE, FALSE, FALSE }, // previous | 68 | { FALSE, FALSE, FALSE }, // previous |
69 | { FALSE, FALSE, FALSE }, // volume up | 69 | { FALSE, FALSE, FALSE }, // volume up |
70 | { FALSE, FALSE, FALSE }, // volume down | 70 | { FALSE, FALSE, FALSE }, // volume down |
71 | { TRUE, FALSE, FALSE }, // repeat/loop | 71 | { TRUE, FALSE, FALSE }, // repeat/loop |
72 | { FALSE, FALSE, FALSE }, // playlist | 72 | { FALSE, FALSE, FALSE }, // playlist |
73 | { FALSE, FALSE, FALSE }, // forward | 73 | { FALSE, FALSE, FALSE }, // forward |
74 | { FALSE, FALSE, FALSE } // back | 74 | { FALSE, FALSE, FALSE } // back |
75 | }; | 75 | }; |
76 | 76 | ||
77 | const char *skin_mask_file_names[10] = { | 77 | const char *skin_mask_file_names[10] = { |
78 | "play", "stop", "next", "prev", "up", | 78 | "play", "stop", "next", "prev", "up", |
79 | "down", "loop", "playlist", "forward", "back" | 79 | "down", "loop", "playlist", "forward", "back" |
80 | }; | 80 | }; |
81 | 81 | ||
82 | 82 | ||
83 | static void changeTextColor( QWidget *w ) { | 83 | static void changeTextColor( QWidget *w ) { |
84 | QPalette p = w->palette(); | 84 | QPalette p = w->palette(); |
85 | p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); | 85 | p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); |
86 | p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); | 86 | p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); |
87 | w->setPalette( p ); | 87 | w->setPalette( p ); |
88 | } | 88 | } |
89 | 89 | ||
90 | static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); | 90 | static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); |
91 | 91 | ||
92 | 92 | ||
93 | AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : | 93 | AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : |
94 | 94 | ||
95 | QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) { | 95 | QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) { |
96 | 96 | ||
97 | setCaption( tr("OpiePlayer") ); | 97 | setCaption( tr("OpiePlayer") ); |
98 | 98 | ||
99 | Config cfg("OpiePlayer"); | 99 | Config cfg("OpiePlayer"); |
100 | cfg.setGroup("Options"); | 100 | cfg.setGroup("Options"); |
101 | skin = cfg.readEntry("Skin","default"); | 101 | skin = cfg.readEntry("Skin","default"); |
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 | ||
177 | AudioWidget::~AudioWidget() { | 182 | AudioWidget::~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 | ||
193 | namespace { | 198 | namespace { |
194 | 199 | ||
195 | QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { | 200 | QPixmap *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 | } |
202 | 207 | ||
203 | 208 | ||
204 | QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) { | 209 | QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) { |
205 | QPixmap *pixmap = new QPixmap( pix ); | 210 | QPixmap *pixmap = new QPixmap( pix ); |
206 | pixmap->setMask( mask ); | 211 | pixmap->setMask( mask ); |
207 | return pixmap; | 212 | return pixmap; |
208 | } | 213 | } |
209 | 214 | ||
210 | }; | 215 | }; |
211 | 216 | ||
212 | void AudioWidget::resizeEvent( QResizeEvent * ) { | 217 | void AudioWidget::resizeEvent( QResizeEvent * ) { |
213 | int h = height(); | 218 | int h = height(); |
214 | int w = width(); | 219 | int w = width(); |
215 | 220 | ||
216 | songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) ); | 221 | songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) ); |
217 | slider.setFixedWidth( w - 110 ); | 222 | slider.setFixedWidth( w - 110 ); |
218 | slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); | 223 | slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); |
219 | slider.setBackgroundOrigin( QWidget::ParentOrigin ); | 224 | slider.setBackgroundOrigin( QWidget::ParentOrigin ); |
220 | time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); | 225 | time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); |
221 | 226 | ||
222 | xoff = ( w - imgUp->width() ) / 2; | 227 | xoff = ( w - imgUp->width() ) / 2; |
223 | yoff = (( h - imgUp->height() ) / 2) - 10; | 228 | yoff = (( h - imgUp->height() ) / 2) - 10; |
224 | QPoint p( xoff, yoff ); | 229 | QPoint p( xoff, yoff ); |
225 | 230 | ||
226 | QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p ); | 231 | QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p ); |
227 | QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p ); | 232 | QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p ); |
228 | 233 | ||
229 | for ( int i = 0; i < 10; i++ ) { | 234 | for ( int i = 0; i < 10; i++ ) { |
230 | if ( !masks[i]->isNull() ) { | 235 | if ( !masks[i]->isNull() ) { |
231 | delete buttonPixUp[i]; | 236 | delete buttonPixUp[i]; |
232 | delete buttonPixDown[i]; | 237 | delete buttonPixDown[i]; |
233 | buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] ); | 238 | buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] ); |
234 | buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] ); | 239 | buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] ); |
235 | } | 240 | } |
236 | } | 241 | } |
237 | 242 | ||
238 | delete pixUp; | 243 | delete pixUp; |
239 | delete pixDn; | 244 | delete pixDn; |
240 | } | 245 | } |
241 | 246 | ||
242 | static bool audioSliderBeingMoved = FALSE; | 247 | static bool audioSliderBeingMoved = FALSE; |
243 | 248 | ||
244 | 249 | ||
245 | void AudioWidget::sliderPressed() { | 250 | void AudioWidget::sliderPressed() { |
246 | audioSliderBeingMoved = TRUE; | 251 | audioSliderBeingMoved = TRUE; |
247 | } | 252 | } |
248 | 253 | ||
249 | 254 | ||
250 | void AudioWidget::sliderReleased() { | 255 | void AudioWidget::sliderReleased() { |
251 | audioSliderBeingMoved = FALSE; | 256 | audioSliderBeingMoved = FALSE; |
252 | if ( slider.width() == 0 ) | 257 | if ( slider.width() == 0 ) |
253 | return; | 258 | return; |
254 | long val = long((double)slider.value() * mediaPlayerState->length() / slider.width()); | 259 | long val = long((double)slider.value() * mediaPlayerState->length() / slider.width()); |
255 | mediaPlayerState->setPosition( val ); | 260 | mediaPlayerState->setPosition( val ); |
256 | } | 261 | } |
257 | 262 | ||
258 | void AudioWidget::setPosition( long i ) { | 263 | void AudioWidget::setPosition( long i ) { |
259 | // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); | 264 | // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); |
260 | updateSlider( i, mediaPlayerState->length() ); | 265 | updateSlider( i, mediaPlayerState->length() ); |
261 | } | 266 | } |
262 | 267 | ||
263 | 268 | ||
264 | void AudioWidget::setLength( long max ) { | 269 | void AudioWidget::setLength( long max ) { |
265 | updateSlider( mediaPlayerState->position(), max ); | 270 | updateSlider( mediaPlayerState->position(), max ); |
266 | } | 271 | } |
267 | 272 | ||
268 | 273 | ||
269 | void AudioWidget::setView( char view ) { | 274 | void AudioWidget::setView( char view ) { |
270 | 275 | ||
271 | if ( view == 'a' ) { | 276 | if ( view == 'a' ) { |
272 | // startTimer( 150 ); | 277 | // startTimer( 150 ); |
273 | showMaximized(); | 278 | showMaximized(); |
274 | } else { | 279 | } else { |
275 | killTimers(); | 280 | killTimers(); |
276 | hide(); | 281 | hide(); |
277 | } | 282 | } |
278 | // qApp->processEvents(); | 283 | // qApp->processEvents(); |
279 | } | 284 | } |
280 | 285 | ||
281 | 286 | ||
282 | void AudioWidget::setSeekable( bool isSeekable ) { | 287 | void AudioWidget::setSeekable( bool isSeekable ) { |
283 | 288 | ||
284 | if ( !isSeekable ) { | 289 | if ( !isSeekable ) { |
285 | qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); | 290 | qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); |
286 | if( !slider.isHidden()) { | 291 | if( !slider.isHidden()) { |
287 | slider.hide(); | 292 | slider.hide(); |
288 | } | 293 | } |
289 | disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); | 294 | disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); |
290 | disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); | 295 | disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); |
291 | disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); | 296 | disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); |
292 | disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); | 297 | disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); |
293 | } else { | 298 | } else { |
294 | // this stops the slider from being moved, thus | 299 | // this stops the slider from being moved, thus |
295 | // does not stop stream when it reaches the end | 300 | // does not stop stream when it reaches the end |
296 | slider.show(); | 301 | slider.show(); |
297 | qDebug( " CONNECT SET POSTION " ); | 302 | qDebug( " CONNECT SET POSTION " ); |
298 | connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); | 303 | connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); |
299 | connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); | 304 | connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); |
300 | connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); | 305 | connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); |
301 | connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); | 306 | connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); |
302 | } | 307 | } |
303 | } | 308 | } |
304 | 309 | ||
305 | 310 | ||
306 | static QString timeAsString( long length ) { | 311 | static QString timeAsString( long length ) { |
307 | int minutes = length / 60; | 312 | int minutes = length / 60; |
308 | int seconds = length % 60; | 313 | int seconds = length % 60; |
309 | return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); | 314 | return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); |
310 | } | 315 | } |
311 | 316 | ||
312 | void AudioWidget::updateSlider( long i, long max ) { | 317 | void AudioWidget::updateSlider( long i, long max ) { |
313 | 318 | ||
314 | time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); | 319 | time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); |
315 | // qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; | 320 | // qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; |
316 | 321 | ||
317 | if ( max == 0 ) { | 322 | if ( max == 0 ) { |
318 | return; | 323 | return; |
319 | } | 324 | } |
320 | // Will flicker too much if we don't do this | 325 | // Will flicker too much if we don't do this |
321 | // Scale to something reasonable | 326 | // Scale to something reasonable |
322 | int width = slider.width(); | 327 | int width = slider.width(); |
323 | int val = int((double)i * width / max); | 328 | int val = int((double)i * width / max); |
324 | if ( !audioSliderBeingMoved ) { | 329 | if ( !audioSliderBeingMoved ) { |
325 | if ( slider.value() != val ) { | 330 | if ( slider.value() != val ) { |
326 | slider.setValue( val ); | 331 | slider.setValue( val ); |
327 | } | 332 | } |
328 | 333 | ||
329 | if ( slider.maxValue() != width ) { | 334 | if ( slider.maxValue() != width ) { |
330 | slider.setMaxValue( width ); | 335 | slider.setMaxValue( width ); |
331 | } | 336 | } |
332 | } | 337 | } |
333 | } | 338 | } |
334 | 339 | ||
335 | 340 | ||
336 | void AudioWidget::setToggleButton( int i, bool down ) { | 341 | void AudioWidget::setToggleButton( int i, bool down ) { |
337 | qDebug("setToggleButton %d", i); | 342 | qDebug("setToggleButton %d", i); |
338 | if ( down != audioButtons[i].isDown ) { | 343 | if ( down != audioButtons[i].isDown ) { |
339 | toggleButton( i ); | 344 | toggleButton( i ); |
340 | } | 345 | } |
341 | } | 346 | } |
342 | 347 | ||
343 | 348 | ||
344 | void AudioWidget::toggleButton( int i ) { | 349 | void AudioWidget::toggleButton( int i ) { |
345 | audioButtons[i].isDown = !audioButtons[i].isDown; | 350 | audioButtons[i].isDown = !audioButtons[i].isDown; |
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 | ||
47 | class QPixmap; | 48 | class QPixmap; |
48 | 49 | ||
49 | namespace { | 50 | namespace { |
50 | 51 | ||
51 | enum AudioButtons { | 52 | enum 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 | ||
65 | class Ticker : public QFrame { | ||
66 | Q_OBJECT | ||
67 | |||
68 | public: | ||
69 | Ticker( QWidget* parent=0 ); | ||
70 | ~Ticker(); | ||
71 | void setText( const QString& text ) ; | ||
72 | |||
73 | protected: | ||
74 | void timerEvent( QTimerEvent * ); | ||
75 | void drawContents( QPainter *p ); | ||
76 | private: | ||
77 | QString scrollText; | ||
78 | int pos, pixelLen; | ||
79 | }; | ||
80 | |||
81 | |||
82 | class AudioWidget : public QWidget { | 66 | class AudioWidget : public QWidget { |
83 | Q_OBJECT | 67 | Q_OBJECT |
84 | public: | 68 | public: |
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 ); } |
88 | public slots: | 72 | public 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 | ||
99 | signals: | 83 | signals: |
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 | ||
110 | protected: | 94 | protected: |
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); |
122 | private slots: | 106 | private slots: |
123 | void skipFor(); | 107 | void skipFor(); |
124 | void skipBack(); | 108 | void skipBack(); |
125 | void stopSkip(); | 109 | void stopSkip(); |
126 | private: | 110 | private: |
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 | |||
@@ -1,610 +1,610 @@ | |||
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 LJP <> | 5 | Copyright (c) 2002 LJP <> |
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 | #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 */ |
56 | typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame, | 56 | typedef 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 | ||
59 | typedef struct null_driver_s null_driver_t; | 59 | typedef struct null_driver_s null_driver_t; |
60 | 60 | ||
61 | struct null_driver_s { | 61 | struct 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 | ||
88 | typedef struct opie_frame_s opie_frame_t; | 88 | typedef struct opie_frame_s opie_frame_t; |
89 | struct opie_frame_s { | 89 | struct 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 | ||
110 | static uint32_t null_get_capabilities( xine_vo_driver_t *self ){ | 110 | static 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 | ||
115 | static void null_frame_copy (vo_frame_t *vo_img, uint8_t **src) { | 115 | static 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 | ||
135 | static void null_frame_field (vo_frame_t *vo_img, int which_field) { | 135 | static 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*/ |
156 | static void null_frame_dispose( vo_frame_t* vo_img){ | 156 | static 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 | ||
166 | static vo_frame_t* null_alloc_frame( xine_vo_driver_t* self ){ | 166 | static 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 | ||
198 | static void null_update_frame_format( xine_vo_driver_t* self, vo_frame_t* img, | 198 | static 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 | ||
341 | static void null_display_frame( xine_vo_driver_t* self, vo_frame_t *frame_gen ){ | 341 | static 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 */ |
360 | static void null_overlay_clut_yuv2rgb (null_driver_t *this, | 360 | static 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 | ||
384 | static void null_overlay_blend ( xine_vo_driver_t *this_gen, vo_frame_t *frame_gen, vo_overlay_t *overlay) { | 384 | static 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 | ||
421 | static int null_get_property( xine_vo_driver_t* self, | 421 | static int null_get_property( xine_vo_driver_t* self, |
422 | int property ){ | 422 | int property ){ |
423 | return 0; | 423 | return 0; |
424 | } | 424 | } |
425 | static int null_set_property( xine_vo_driver_t* self, | 425 | static 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 | } |
430 | static void null_get_property_min_max( xine_vo_driver_t* self, | 430 | static 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 | } |
436 | static int null_gui_data_exchange( xine_vo_driver_t* self, | 436 | static 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 | ||
442 | static void null_dispose ( xine_vo_driver_t* self ){ | 442 | static 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 | } |
446 | static int null_redraw_needed( xine_vo_driver_t* self ){ | 446 | static int null_redraw_needed( xine_vo_driver_t* self ){ |
447 | return 0; | 447 | return 0; |
448 | } | 448 | } |
449 | 449 | ||
450 | 450 | ||
451 | xine_vo_driver_t* init_video_out_plugin( config_values_t* conf, | 451 | xine_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 |
494 | static vo_info_t vo_info_null = { | 494 | static vo_info_t vo_info_null = { |
495 | 5, | 495 | 5, |
496 | XINE_VISUAL_TYPE_FB | 496 | XINE_VISUAL_TYPE_FB |
497 | }; | 497 | }; |
498 | 498 | ||
499 | vo_info_t *get_video_out_plugin_info(){ | 499 | vo_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 | */ |
514 | int null_is_showing_video( xine_vo_driver_t* self ){ | 514 | int 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 | } |
518 | void null_set_show_video( xine_vo_driver_t* self, int show ) { | 518 | void 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 | ||
522 | int null_is_fullscreen( xine_vo_driver_t* self ){ | 522 | int 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 | } |
525 | void null_set_fullscreen( xine_vo_driver_t* self, int screen ){ | 525 | void 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 | } |
528 | int null_is_scaling( xine_vo_driver_t* self ){ | 528 | int 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 | ||
532 | void null_set_videoGamma( xine_vo_driver_t* self , int value ) { | 532 | void 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 | ||
537 | void null_set_scaling( xine_vo_driver_t* self, int scale ) { | 537 | void 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 | ||
541 | void null_set_gui_width( xine_vo_driver_t* self, int width ) { | 541 | void 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 | } |
544 | void null_set_gui_height( xine_vo_driver_t* self, int height ) { | 544 | void 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 | ||
549 | void null_set_mode( xine_vo_driver_t* self, int depth, int rgb ) { | 549 | void 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 | ||
604 | void null_display_handler( xine_vo_driver_t* self, display_xine_frame_t t, | 604 | void 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 | |||
@@ -602,388 +602,385 @@ void PlayListWidget::tabChanged(QWidget *) { | |||
602 | void PlayListWidget::btnPlay(bool b) { | 602 | void PlayListWidget::btnPlay(bool b) { |
603 | // mediaPlayerState->setPlaying(false); | 603 | // mediaPlayerState->setPlaying(false); |
604 | mediaPlayerState->setPlaying(b); | 604 | mediaPlayerState->setPlaying(b); |
605 | insanityBool=FALSE; | 605 | insanityBool=FALSE; |
606 | } | 606 | } |
607 | 607 | ||
608 | void PlayListWidget::deletePlaylist() { | 608 | void PlayListWidget::deletePlaylist() { |
609 | switch( QMessageBox::information( this, (tr("Remove Playlist?")), | 609 | switch( QMessageBox::information( this, (tr("Remove Playlist?")), |
610 | (tr("You really want to delete\nthis playlist?")), | 610 | (tr("You really want to delete\nthis playlist?")), |
611 | (tr("Yes")), (tr("No")), 0 )){ | 611 | (tr("Yes")), (tr("No")), 0 )){ |
612 | case 0: // Yes clicked, | 612 | case 0: // Yes clicked, |
613 | QFile().remove(playLists->selectedDocument().file()); | 613 | QFile().remove(playLists->selectedDocument().file()); |
614 | QFile().remove(playLists->selectedDocument().linkFile()); | 614 | QFile().remove(playLists->selectedDocument().linkFile()); |
615 | playLists->reread(); | 615 | playLists->reread(); |
616 | break; | 616 | break; |
617 | case 1: // Cancel | 617 | case 1: // Cancel |
618 | break; | 618 | break; |
619 | }; | 619 | }; |
620 | } | 620 | } |
621 | 621 | ||
622 | 622 | ||
623 | void PlayListWidget::playSelected() { | 623 | void PlayListWidget::playSelected() { |
624 | btnPlay( TRUE); | 624 | btnPlay( TRUE); |
625 | } | 625 | } |
626 | 626 | ||
627 | 627 | ||
628 | void PlayListWidget::scanForAudio() { | 628 | void PlayListWidget::scanForAudio() { |
629 | // qDebug("scan for audio"); | 629 | // qDebug("scan for audio"); |
630 | files.detachChildren(); | 630 | files.detachChildren(); |
631 | QListIterator<DocLnk> sdit( files.children() ); | 631 | QListIterator<DocLnk> sdit( files.children() ); |
632 | for ( ; sdit.current(); ++sdit ) { | 632 | for ( ; sdit.current(); ++sdit ) { |
633 | delete sdit.current(); | 633 | delete sdit.current(); |
634 | } | 634 | } |
635 | // Global::findDocuments( &files, "audio/*"); | 635 | // Global::findDocuments( &files, "audio/*"); |
636 | Global::findDocuments( &files, audioMimes); | 636 | Global::findDocuments( &files, audioMimes); |
637 | audioScan = TRUE; | 637 | audioScan = TRUE; |
638 | } | 638 | } |
639 | 639 | ||
640 | void PlayListWidget::scanForVideo() { | 640 | void PlayListWidget::scanForVideo() { |
641 | // qDebug("scan for video"); | 641 | // qDebug("scan for video"); |
642 | vFiles.detachChildren(); | 642 | vFiles.detachChildren(); |
643 | QListIterator<DocLnk> sdit( vFiles.children() ); | 643 | QListIterator<DocLnk> sdit( vFiles.children() ); |
644 | for ( ; sdit.current(); ++sdit ) { | 644 | for ( ; sdit.current(); ++sdit ) { |
645 | delete sdit.current(); | 645 | delete sdit.current(); |
646 | } | 646 | } |
647 | Global::findDocuments(&vFiles, "video/*"); | 647 | Global::findDocuments(&vFiles, "video/*"); |
648 | videoScan = TRUE; | 648 | videoScan = TRUE; |
649 | } | 649 | } |
650 | 650 | ||
651 | void PlayListWidget::populateAudioView() { | 651 | void PlayListWidget::populateAudioView() { |
652 | audioView->clear(); | 652 | audioView->clear(); |
653 | StorageInfo storageInfo; | 653 | StorageInfo storageInfo; |
654 | const QList<FileSystem> &fs = storageInfo.fileSystems(); | 654 | const QList<FileSystem> &fs = storageInfo.fileSystems(); |
655 | if(!audioScan) { | 655 | if(!audioScan) { |
656 | scanForAudio(); | 656 | scanForAudio(); |
657 | } | 657 | } |
658 | 658 | ||
659 | QListIterator<DocLnk> dit( files.children() ); | 659 | QListIterator<DocLnk> dit( files.children() ); |
660 | QListIterator<FileSystem> it ( fs ); | 660 | QListIterator<FileSystem> it ( fs ); |
661 | 661 | ||
662 | QString storage; | 662 | QString storage; |
663 | for ( ; dit.current(); ++dit ) { | 663 | for ( ; dit.current(); ++dit ) { |
664 | for( ; it.current(); ++it ){ | 664 | for( ; it.current(); ++it ){ |
665 | const QString name = (*it)->name(); | 665 | const QString name = (*it)->name(); |
666 | const QString path = (*it)->path(); | 666 | const QString path = (*it)->path(); |
667 | if(dit.current()->file().find(path) != -1 ) { | 667 | if(dit.current()->file().find(path) != -1 ) { |
668 | storage = name; | 668 | storage = name; |
669 | } | 669 | } |
670 | } | 670 | } |
671 | 671 | ||
672 | QListViewItem * newItem; | 672 | QListViewItem * newItem; |
673 | if ( QFile( dit.current()->file()).exists() || | 673 | if ( QFile( dit.current()->file()).exists() || |
674 | dit.current()->file().left(4) == "http" ) { | 674 | dit.current()->file().left(4) == "http" ) { |
675 | long size; | 675 | long size; |
676 | if( dit.current()->file().left(4) == "http" ) | 676 | if( dit.current()->file().left(4) == "http" ) |
677 | size=0; | 677 | size=0; |
678 | else | 678 | else |
679 | size = QFile( dit.current()->file() ).size(); | 679 | size = QFile( dit.current()->file() ).size(); |
680 | newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(), | 680 | newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(), |
681 | QString::number(size ), storage, dit.current()->file()); | 681 | QString::number(size ), storage, dit.current()->file()); |
682 | newItem->setPixmap( 0, Resource::loadPixmap( "opieplayer2/musicfile" ) ); | 682 | newItem->setPixmap( 0, Resource::loadPixmap( "opieplayer2/musicfile" ) ); |
683 | } | 683 | } |
684 | } | 684 | } |
685 | } | 685 | } |
686 | 686 | ||
687 | 687 | ||
688 | void PlayListWidget::populateVideoView() { | 688 | void PlayListWidget::populateVideoView() { |
689 | videoView->clear(); | 689 | videoView->clear(); |
690 | StorageInfo storageInfo; | 690 | StorageInfo storageInfo; |
691 | const QList<FileSystem> &fs = storageInfo.fileSystems(); | 691 | const QList<FileSystem> &fs = storageInfo.fileSystems(); |
692 | 692 | ||
693 | if(!videoScan ) { | 693 | if(!videoScan ) { |
694 | scanForVideo(); | 694 | scanForVideo(); |
695 | } | 695 | } |
696 | 696 | ||
697 | QListIterator<DocLnk> Vdit( vFiles.children() ); | 697 | QListIterator<DocLnk> Vdit( vFiles.children() ); |
698 | QListIterator<FileSystem> it ( fs ); | 698 | QListIterator<FileSystem> it ( fs ); |
699 | videoView->clear(); | 699 | videoView->clear(); |
700 | QString storage, pathName; | 700 | QString storage, pathName; |
701 | for ( ; Vdit.current(); ++Vdit ) { | 701 | for ( ; Vdit.current(); ++Vdit ) { |
702 | for( ; it.current(); ++it ) { | 702 | for( ; it.current(); ++it ) { |
703 | const QString name = (*it)->name(); | 703 | const QString name = (*it)->name(); |
704 | const QString path = (*it)->path(); | 704 | const QString path = (*it)->path(); |
705 | if( Vdit.current()->file().find(path) != -1 ) { | 705 | if( Vdit.current()->file().find(path) != -1 ) { |
706 | storage=name; | 706 | storage=name; |
707 | pathName=path; | 707 | pathName=path; |
708 | } | 708 | } |
709 | } | 709 | } |
710 | 710 | ||
711 | QListViewItem * newItem; | 711 | QListViewItem * newItem; |
712 | if ( QFile( Vdit.current()->file() ).exists() ) { | 712 | if ( QFile( Vdit.current()->file() ).exists() ) { |
713 | newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), | 713 | newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), |
714 | QString::number( QFile( Vdit.current()->file() ).size() ), | 714 | QString::number( QFile( Vdit.current()->file() ).size() ), |
715 | storage, Vdit.current()->file()); | 715 | storage, Vdit.current()->file()); |
716 | newItem->setPixmap(0, Resource::loadPixmap( "opieplayer2/videofile" ) ); | 716 | newItem->setPixmap(0, Resource::loadPixmap( "opieplayer2/videofile" ) ); |
717 | } | 717 | } |
718 | } | 718 | } |
719 | } | 719 | } |
720 | 720 | ||
721 | 721 | ||
722 | void PlayListWidget::openFile() { | 722 | void PlayListWidget::openFile() { |
723 | // http://66.28.164.33:2080 | 723 | // http://66.28.164.33:2080 |
724 | // http://somafm.com/star0242.m3u | 724 | // http://somafm.com/star0242.m3u |
725 | QString filename, name; | 725 | QString filename, name; |
726 | InputDialog *fileDlg; | 726 | InputDialog *fileDlg; |
727 | fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0); | 727 | fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0); |
728 | fileDlg->exec(); | 728 | fileDlg->exec(); |
729 | if( fileDlg->result() == 1 ) { | 729 | if( fileDlg->result() == 1 ) { |
730 | filename = fileDlg->text(); | 730 | filename = fileDlg->text(); |
731 | qDebug( "Selected filename is " + filename ); | 731 | qDebug( "Selected filename is " + filename ); |
732 | Om3u *m3uList; | 732 | Om3u *m3uList; |
733 | DocLnk lnk; | 733 | DocLnk lnk; |
734 | Config cfg( "OpiePlayer" ); | 734 | Config cfg( "OpiePlayer" ); |
735 | cfg.setGroup("PlayList"); | 735 | cfg.setGroup("PlayList"); |
736 | 736 | ||
737 | if(filename.left(4) == "http") { | 737 | if(filename.left(4) == "http") { |
738 | QString m3uFile, m3uFilePath; | 738 | QString m3uFile, m3uFilePath; |
739 | if(filename.find(":",8,TRUE) != -1) { //found a port | 739 | if(filename.find(":",8,TRUE) != -1) { //found a port |
740 | m3uFile = filename.left( filename.find( ":",8,TRUE)); | 740 | m3uFile = filename.left( filename.find( ":",8,TRUE)); |
741 | m3uFile = m3uFile.right( 7); | 741 | m3uFile = m3uFile.right( 7); |
742 | } else if(filename.left(4) == "http"){ | 742 | } else if(filename.left(4) == "http"){ |
743 | m3uFile=filename; | 743 | m3uFile=filename; |
744 | m3uFile = m3uFile.right( m3uFile.length() - 7); | 744 | m3uFile = m3uFile.right( m3uFile.length() - 7); |
745 | } else{ | 745 | } else{ |
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 | /* |
779 | reads m3u and shows files/urls to playlist widget */ | 779 | reads m3u and shows files/urls to playlist widget */ |
780 | void PlayListWidget::readm3u( const QString &filename ) { | 780 | void 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 | /* |
834 | reads pls and adds files/urls to playlist */ | 831 | reads pls and adds files/urls to playlist */ |
835 | void PlayListWidget::readPls( const QString &filename ) { | 832 | void 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" )," " ); |
846 | DocLnk lnk( s ); | 843 | DocLnk lnk( s ); |
847 | QFileInfo f( s ); | 844 | QFileInfo f( s ); |
848 | QString name = f.baseName(); | 845 | QString name = f.baseName(); |
849 | 846 | ||
850 | if( name.left( 4 ) == "http" ) { | 847 | if( name.left( 4 ) == "http" ) { |
851 | name = s.right( s.length() - 7); | 848 | name = s.right( s.length() - 7); |
852 | } else { | 849 | } else { |
853 | name = s; | 850 | name = s; |
854 | } | 851 | } |
855 | 852 | ||
856 | name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 ); | 853 | name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 ); |
857 | 854 | ||
858 | lnk.setName( name ); | 855 | lnk.setName( name ); |
859 | if( s.at( s.length() - 4) == '.') {// if this is probably a file | 856 | if( s.at( s.length() - 4) == '.') {// if this is probably a file |
860 | lnk.setFile( s ); | 857 | lnk.setFile( s ); |
861 | } else { //if its a url | 858 | } else { //if its a url |
862 | // if( name.right( 1 ).find( '/' ) == -1) { | 859 | // if( name.right( 1 ).find( '/' ) == -1) { |
863 | // s += "/"; | 860 | // s += "/"; |
864 | // } | 861 | // } |
865 | lnk.setFile( s ); | 862 | lnk.setFile( s ); |
866 | } | 863 | } |
867 | lnk.setType( "audio/x-mpegurl" ); | 864 | lnk.setType( "audio/x-mpegurl" ); |
868 | 865 | ||
869 | lnk.writeLink(); | 866 | lnk.writeLink(); |
870 | d->selectedFiles->addToSelection( lnk ); | 867 | d->selectedFiles->addToSelection( lnk ); |
871 | } | 868 | } |
872 | 869 | ||
873 | m3uList->close(); | 870 | m3uList->close(); |
874 | if(m3uList) delete m3uList; | 871 | if(m3uList) delete m3uList; |
875 | } | 872 | } |
876 | 873 | ||
877 | /* | 874 | /* |
878 | writes current playlist to current m3u file */ | 875 | writes current playlist to current m3u file */ |
879 | void PlayListWidget::writeCurrentM3u() { | 876 | void PlayListWidget::writeCurrentM3u() { |
880 | qDebug("writing to current m3u"); | 877 | qDebug("writing to current m3u"); |
881 | Config cfg( "OpiePlayer" ); | 878 | Config cfg( "OpiePlayer" ); |
882 | cfg.setGroup("PlayList"); | 879 | cfg.setGroup("PlayList"); |
883 | QString currentPlaylist = cfg.readEntry("CurrentPlaylist","default"); | 880 | QString currentPlaylist = cfg.readEntry("CurrentPlaylist","default"); |
884 | 881 | ||
885 | Om3u *m3uList; | 882 | Om3u *m3uList; |
886 | m3uList = new Om3u( currentPlaylist, IO_ReadWrite | IO_Truncate ); | 883 | m3uList = new Om3u( currentPlaylist, IO_ReadWrite | IO_Truncate ); |
887 | if( d->selectedFiles->first()) { | 884 | if( d->selectedFiles->first()) { |
888 | 885 | ||
889 | do { | 886 | do { |
890 | qDebug( "add writeCurrentM3u " +d->selectedFiles->current()->file()); | 887 | qDebug( "add writeCurrentM3u " +d->selectedFiles->current()->file()); |
891 | m3uList->add( d->selectedFiles->current()->file() ); | 888 | m3uList->add( d->selectedFiles->current()->file() ); |
892 | } | 889 | } |
893 | while ( d->selectedFiles->next() ); | 890 | while ( d->selectedFiles->next() ); |
894 | qDebug( "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" ); | 891 | qDebug( "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" ); |
895 | m3uList->write(); | 892 | m3uList->write(); |
896 | m3uList->close(); | 893 | m3uList->close(); |
897 | 894 | ||
898 | if(m3uList) delete m3uList; | 895 | if(m3uList) delete m3uList; |
899 | } | 896 | } |
900 | 897 | ||
901 | } | 898 | } |
902 | 899 | ||
903 | /* | 900 | /* |
904 | writes current playlist to m3u file */ | 901 | writes current playlist to m3u file */ |
905 | void PlayListWidget::writem3u() { | 902 | void PlayListWidget::writem3u() { |
906 | InputDialog *fileDlg; | 903 | InputDialog *fileDlg; |
907 | fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); | 904 | fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); |
908 | fileDlg->exec(); | 905 | fileDlg->exec(); |
909 | QString name, filename, list; | 906 | QString name, filename, list; |
910 | Om3u *m3uList; | 907 | Om3u *m3uList; |
911 | 908 | ||
912 | if( fileDlg->result() == 1 ) { | 909 | if( fileDlg->result() == 1 ) { |
913 | name = fileDlg->text(); | 910 | name = fileDlg->text(); |
914 | // qDebug( filename ); | 911 | // qDebug( filename ); |
915 | 912 | ||
916 | if( name.left( 1) != "/" ) { | 913 | if( name.left( 1) != "/" ) { |
917 | filename = QPEApplication::documentDir() + "/" + name; | 914 | filename = QPEApplication::documentDir() + "/" + name; |
918 | } | 915 | } |
919 | 916 | ||
920 | if( name.right( 3 ) != "m3u" ) { | 917 | if( name.right( 3 ) != "m3u" ) { |
921 | filename = QPEApplication::documentDir() + "/" +name+".m3u"; | 918 | filename = QPEApplication::documentDir() + "/" +name+".m3u"; |
922 | } | 919 | } |
923 | 920 | ||
924 | if( d->selectedFiles->first()) { | 921 | if( d->selectedFiles->first()) { |
925 | m3uList = new Om3u(filename, IO_ReadWrite); | 922 | m3uList = new Om3u(filename, IO_ReadWrite); |
926 | 923 | ||
927 | do { | 924 | do { |
928 | m3uList->add( d->selectedFiles->current()->file()); | 925 | m3uList->add( d->selectedFiles->current()->file()); |
929 | } | 926 | } |
930 | while ( d->selectedFiles->next() ); | 927 | while ( d->selectedFiles->next() ); |
931 | // qDebug( list ); | 928 | // qDebug( list ); |
932 | m3uList->write(); | 929 | m3uList->write(); |
933 | m3uList->close(); | 930 | m3uList->close(); |
934 | if(m3uList) delete m3uList; | 931 | if(m3uList) delete m3uList; |
935 | 932 | ||
936 | if(fileDlg) delete fileDlg; | 933 | if(fileDlg) delete fileDlg; |
937 | 934 | ||
938 | DocLnk lnk; | 935 | DocLnk lnk; |
939 | lnk.setFile( filename); | 936 | lnk.setFile( filename); |
940 | // lnk.setIcon("opieplayer2/playlist2"); | 937 | // lnk.setIcon("opieplayer2/playlist2"); |
941 | lnk.setName( name); //sets file name | 938 | lnk.setName( name); //sets file name |
942 | 939 | ||
943 | // qDebug(filename); | 940 | // qDebug(filename); |
944 | Config config( "OpiePlayer" ); | 941 | Config config( "OpiePlayer" ); |
945 | config.setGroup( "PlayList" ); | 942 | config.setGroup( "PlayList" ); |
946 | 943 | ||
947 | config.writeEntry("CurrentPlaylist",filename); | 944 | config.writeEntry("CurrentPlaylist",filename); |
948 | currentPlayList=filename; | 945 | currentPlayList=filename; |
949 | 946 | ||
950 | if(!lnk.writeLink()) { | 947 | if(!lnk.writeLink()) { |
951 | qDebug("Writing doclink did not work"); | 948 | qDebug("Writing doclink did not work"); |
952 | } | 949 | } |
953 | 950 | ||
954 | setCaption(tr("OpiePlayer: ") + name); | 951 | setCaption(tr("OpiePlayer: ") + name); |
955 | } | 952 | } |
956 | } | 953 | } |
957 | } | 954 | } |
958 | 955 | ||
959 | void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { | 956 | void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { |
960 | switch ( e->key() ) { | 957 | switch ( e->key() ) { |
961 | ////////////////////////////// Zaurus keys | 958 | ////////////////////////////// Zaurus keys |
962 | case Key_F9: //activity | 959 | case Key_F9: //activity |
963 | // if(audioUI->isHidden()) | 960 | // if(audioUI->isHidden()) |
964 | // audioUI->showMaximized(); | 961 | // audioUI->showMaximized(); |
965 | break; | 962 | break; |
966 | case Key_F10: //contacts | 963 | case Key_F10: //contacts |
967 | // if( videoUI->isHidden()) | 964 | // if( videoUI->isHidden()) |
968 | // videoUI->showMaximized(); | 965 | // videoUI->showMaximized(); |
969 | break; | 966 | break; |
970 | case Key_F11: //menu | 967 | case Key_F11: //menu |
971 | break; | 968 | break; |
972 | case Key_F12: //home | 969 | case Key_F12: //home |
973 | // doBlank(); | 970 | // doBlank(); |
974 | break; | 971 | break; |
975 | case Key_F13: //mail | 972 | case Key_F13: //mail |
976 | // doUnblank(); | 973 | // doUnblank(); |
977 | break; | 974 | break; |
978 | case Key_Q: //add to playlist | 975 | case Key_Q: //add to playlist |
979 | addSelected(); | 976 | addSelected(); |
980 | break; | 977 | break; |
981 | case Key_R: //remove from playlist | 978 | case Key_R: //remove from playlist |
982 | removeSelected(); | 979 | removeSelected(); |
983 | break; | 980 | break; |
984 | // case Key_P: //play | 981 | // case Key_P: //play |
985 | // qDebug("Play"); | 982 | // qDebug("Play"); |
986 | // playSelected(); | 983 | // playSelected(); |
987 | // break; | 984 | // break; |
988 | case Key_Space: | 985 | case Key_Space: |
989 | // playSelected(); puh | 986 | // playSelected(); puh |