summaryrefslogtreecommitdiff
path: root/noncore/multimedia/opieplayer2/lib.cpp
Unidiff
Diffstat (limited to 'noncore/multimedia/opieplayer2/lib.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp39
1 files changed, 9 insertions, 30 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp
index 248221b..8afb318 100644
--- a/noncore/multimedia/opieplayer2/lib.cpp
+++ b/noncore/multimedia/opieplayer2/lib.cpp
@@ -121,59 +121,49 @@ void Lib::initialize()
121 m_xine = xine_new( ); 121 m_xine = xine_new( );
122 122
123 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; 123 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf";
124 xine_config_load( m_xine, QFile::encodeName( configPath ) ); 124 xine_config_load( m_xine, QFile::encodeName( configPath ) );
125 125
126 xine_init( m_xine ); 126 xine_init( m_xine );
127 127
128 // allocate oss for sound 128 // allocate oss for sound
129 // and fb for framebuffer 129 // and fb for framebuffer
130 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL ); 130 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL );
131 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this ); 131 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this );
132 132
133
134//xine_open_video_driver( m_xine, NULL, XINE_VISUAL_TYPE_FB, NULL);
135
136
137// null_display_handler( m_videoOutput, xine_display_frame, this );
138
139 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput ); 133 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput );
140 134
141 if (m_wid != 0 ) { 135 if (m_wid != 0 )
142 printf( "!0\n" );
143 setWidget( m_wid ); 136 setWidget( m_wid );
144 }
145 137
146 m_queue = xine_event_new_queue (m_stream);
147 138
139 m_queue = xine_event_new_queue (m_stream);
148 xine_event_create_listener_thread (m_queue, xine_event_handler, this); 140 xine_event_create_listener_thread (m_queue, xine_event_handler, this);
149 141
150 ::null_preload_decoders( m_stream ); 142 ::null_preload_decoders( m_stream );
151 143
152 m_duringInitialization = false; 144 m_duringInitialization = false;
153} 145}
154 146
155Lib::~Lib() { 147Lib::~Lib() {
156 assert( isRunning() == false ); 148 assert( isRunning() == false );
157 assert( m_initialized ); 149 assert( m_initialized );
158 150
159// free( m_config ); 151// free( m_config );
160 152
161 xine_close( m_stream ); 153 xine_close( m_stream );
162
163 xine_event_dispose_queue( m_queue ); 154 xine_event_dispose_queue( m_queue );
164
165 xine_dispose( m_stream ); 155 xine_dispose( m_stream );
166
167 xine_exit( m_xine ); 156 xine_exit( m_xine );
157
168 /* FIXME either free or delete but valgrind bitches against both */ 158 /* FIXME either free or delete but valgrind bitches against both */
169 //free( m_videoOutput ); 159 //free( m_videoOutput );
170 //delete m_audioOutput; 160 //delete m_audioOutput;
171} 161}
172 162
173void Lib::resize ( const QSize &s ) { 163void Lib::resize ( const QSize &s ) {
174 assert( m_initialized || m_duringInitialization ); 164 assert( m_initialized || m_duringInitialization );
175 165
176 if ( s. width ( ) && s. height ( ) ) { 166 if ( s. width ( ) && s. height ( ) ) {
177 ::null_set_gui_width( m_videoOutput, s. width() ); 167 ::null_set_gui_width( m_videoOutput, s. width() );
178 ::null_set_gui_height( m_videoOutput, s. height() ); 168 ::null_set_gui_height( m_videoOutput, s. height() );
179 } 169 }
@@ -190,44 +180,36 @@ int Lib::minorVersion() {
190 xine_get_version ( &major, &minor, &sub ); 180 xine_get_version ( &major, &minor, &sub );
191 return minor; 181 return minor;
192} 182}
193 183
194int Lib::subVersion() { 184int Lib::subVersion() {
195 int major, minor, sub; 185 int major, minor, sub;
196 xine_get_version ( &major, &minor, &sub ); 186 xine_get_version ( &major, &minor, &sub );
197 return sub; 187 return sub;
198} 188}
199 189
200int Lib::play( const QString& fileName, int startPos, int start_time ) { 190int Lib::play( const QString& fileName, int startPos, int start_time ) {
201 assert( m_initialized ); 191 assert( m_initialized );
202 // FIXME actually a hack imho. Should not be needed to dispose the whole stream
203 // but without we get wrong media length reads from libxine for the second media
204 //xine_dispose ( m_stream );
205 192
206 QString str = fileName.stripWhiteSpace(); 193 QString str = fileName.stripWhiteSpace();
207 194
208 //m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput );
209 //m_queue = xine_event_new_queue (m_stream);
210 //xine_event_create_listener_thread (m_queue, xine_event_handler, this);
211 195
212 if ( !xine_open( m_stream, str.utf8().data() ) ) { 196 if ( !xine_open( m_stream, str.utf8().data() ) ) {
213 return 0; 197 return 0;
214 } 198 }
215 return xine_play( m_stream, startPos, start_time); 199 return xine_play( m_stream, startPos, start_time);
216} 200}
217 201
218void Lib::stop() { 202void Lib::stop() {
219 assert( m_initialized ); 203 assert( m_initialized );
220
221 odebug << "<<<<<<<< STOP IN LIB TRIGGERED >>>>>>>" << oendl;
222 xine_stop( m_stream ); 204 xine_stop( m_stream );
223} 205}
224 206
225void Lib::pause( bool toggle ) { 207void Lib::pause( bool toggle ) {
226 assert( m_initialized ); 208 assert( m_initialized );
227 209
228 xine_set_param( m_stream, XINE_PARAM_SPEED, toggle ? XINE_SPEED_PAUSE : XINE_SPEED_NORMAL ); 210 xine_set_param( m_stream, XINE_PARAM_SPEED, toggle ? XINE_SPEED_PAUSE : XINE_SPEED_NORMAL );
229} 211}
230 212
231int Lib::speed() const { 213int Lib::speed() const {
232 assert( m_initialized ); 214 assert( m_initialized );
233 215
@@ -249,30 +231,30 @@ int Lib::status() const {
249int Lib::currentPosition() const { 231int Lib::currentPosition() const {
250 assert( m_initialized ); 232 assert( m_initialized );
251 233
252 int pos, time, length; 234 int pos, time, length;
253 xine_get_pos_length( m_stream, &pos, &time, &length ); 235 xine_get_pos_length( m_stream, &pos, &time, &length );
254 return pos; 236 return pos;
255} 237}
256 238
257int Lib::currentTime() const { 239int Lib::currentTime() const {
258 assert( m_initialized ); 240 assert( m_initialized );
259 241
260 int pos, time, length; 242 int pos, time, length;
261 xine_get_pos_length( m_stream, &pos, &time, &length ); 243 pos = time = length = 0;
262 if ( time > 0 ) { 244
245 if ( xine_get_pos_length( m_stream, &pos, &time, &length ) )
263 return time/1000; 246 return time/1000;
264 } else { 247 else
265 return 0; 248 return 0;
266 }
267} 249}
268 250
269int Lib::length() const { 251int Lib::length() const {
270 assert( m_initialized ); 252 assert( m_initialized );
271 253
272 int pos, time, length; 254 int pos, time, length;
273/* dilb: patch to solve the wrong stream length reported to the GUI*/ 255/* dilb: patch to solve the wrong stream length reported to the GUI*/
274 int iRetVal=0, iTestLoop=0; 256 int iRetVal=0, iTestLoop=0;
275 257
276 do 258 do
277 { 259 {
278 iRetVal = xine_get_pos_length( m_stream, &pos, &time, &length ); 260 iRetVal = xine_get_pos_length( m_stream, &pos, &time, &length );
@@ -291,26 +273,24 @@ unseekable, but it should never occur!! Mr. Murphy ? :) ) */
291 return -1; 273 return -1;
292} 274}
293 275
294bool Lib::isSeekable() const { 276bool Lib::isSeekable() const {
295 assert( m_initialized ); 277 assert( m_initialized );
296 278
297 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE ); 279 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE );
298} 280}
299 281
300void Lib::seekTo( int time ) { 282void Lib::seekTo( int time ) {
301 assert( m_initialized ); 283 assert( m_initialized );
302 284
303 //xine_trick_mode ( m_stream, XINE_TRICK_MODE_SEEK_TO_TIME, time ); NOT IMPLEMENTED YET IN XINE :_(
304 // since its now milliseconds we need *1000
305 xine_play( m_stream, 0, time*1000 ); 285 xine_play( m_stream, 0, time*1000 );
306} 286}
307 287
308 288
309Frame Lib::currentFrame() const { 289Frame Lib::currentFrame() const {
310 assert( m_initialized ); 290 assert( m_initialized );
311 291
312 Frame frame; 292 Frame frame;
313 return frame; 293 return frame;
314}; 294};
315 295
316QString Lib::metaInfo( int number) const { 296QString Lib::metaInfo( int number) const {
@@ -416,20 +396,19 @@ void Lib::xine_event_handler( void* user_data, const xine_event_t* t ) {
416 ( (Lib*)user_data)->handleXineEvent( t ); 396 ( (Lib*)user_data)->handleXineEvent( t );
417} 397}
418 398
419void Lib::xine_display_frame( void* user_data, uint8_t *frame, 399void Lib::xine_display_frame( void* user_data, uint8_t *frame,
420 int width, int height, int bytes ) { 400 int width, int height, int bytes ) {
421 ( (Lib*)user_data)->drawFrame( frame, width, height, bytes ); 401 ( (Lib*)user_data)->drawFrame( frame, width, height, bytes );
422} 402}
423 403
424void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) { 404void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) {
425 assert( m_initialized ); 405 assert( m_initialized );
426 406
427 if ( !m_video ) { 407 if ( !m_video ) {
428 owarn << "not showing video now" << oendl;
429 return; 408 return;
430 } 409 }
431 410
432 assert( m_wid ); 411 assert( m_wid );
433 412
434 m_wid-> setVideoFrame ( frame, width, height, bytes ); 413 m_wid-> setVideoFrame ( frame, width, height, bytes );
435} 414}