summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/loopcontrol.cpp
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/loopcontrol.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/loopcontrol.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp
index 3171c4b..70e4a78 100644
--- a/core/multimedia/opieplayer/loopcontrol.cpp
+++ b/core/multimedia/opieplayer/loopcontrol.cpp
@@ -150,13 +150,13 @@ void LoopControl::timerEvent( QTimerEvent *te ) {
150 } 150 }
151} 151}
152 152
153 153
154void LoopControl::setPosition( long pos ) { 154void LoopControl::setPosition( long pos ) {
155 audioMutex->lock(); 155 audioMutex->lock();
156 156// qDebug("Loop control %d", pos);
157 if ( hasVideoChannel && hasAudioChannel ) { 157 if ( hasVideoChannel && hasAudioChannel ) {
158 playtime.restart(); 158 playtime.restart();
159 playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) ); 159 playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) );
160 current_frame = pos + 1; 160 current_frame = pos + 1;
161 mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); 161 mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
162 prev_frame = current_frame - 1; 162 prev_frame = current_frame - 1;
@@ -217,13 +217,12 @@ void LoopControl::startVideo() {
217 } 217 }
218} 218}
219 219
220 220
221void LoopControl::startAudio() { 221void LoopControl::startAudio() {
222 222
223//qDebug("start audio");
224 audioMutex->lock(); 223 audioMutex->lock();
225 if ( moreAudio ) { 224 if ( moreAudio ) {
226 225
227 if ( !isMuted && mediaPlayerState->curDecoder() ) { 226 if ( !isMuted && mediaPlayerState->curDecoder() ) {
228 227
229 currentSample = audioSampleCounter + 1; 228 currentSample = audioSampleCounter + 1;
@@ -234,20 +233,20 @@ void LoopControl::startAudio() {
234 long samplesRead = 0; 233 long samplesRead = 0;
235 bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); 234 bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream );
236 long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; 235 long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000;
237 long sampleWaitTime = currentSample - sampleWeShouldBeAt; 236 long sampleWaitTime = currentSample - sampleWeShouldBeAt;
238 237
239// this causes drop outs not sure why its even here 238// this causes drop outs not sure why its even here
240 if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { 239// if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) {
241 usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); 240// usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) );
242 } 241// }
243 else if ( sampleWaitTime <= -5000 ) { 242// else if ( sampleWaitTime <= -5000 ) {
244 qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); 243// qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt );
245// //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); 244// // //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream );
246 currentSample = sampleWeShouldBeAt; 245// currentSample = sampleWeShouldBeAt;
247 } 246// }
248 247
249 audioDevice->write( audioBuffer, samplesRead * 2 * channels ); 248 audioDevice->write( audioBuffer, samplesRead * 2 * channels );
250 249
251 if( mediaPlayerState->isStreaming == FALSE) 250 if( mediaPlayerState->isStreaming == FALSE)
252 audioSampleCounter = currentSample + samplesRead - 1; 251 audioSampleCounter = currentSample + samplesRead - 1;
253 252
@@ -342,20 +341,21 @@ void LoopControl::stop( bool willPlayAgainShortly ) {
342 delete audioBuffer; 341 delete audioBuffer;
343 audioDevice = 0; 342 audioDevice = 0;
344 audioBuffer = 0; 343 audioBuffer = 0;
345 } 344 }
346 345
347 audioMutex->unlock(); 346 audioMutex->unlock();
348
349 } 347 }
348 audioSampleCounter=0;
349 current_frame=0;
350 total_audio_samples=0;
350} 351}
351 352
352 353
353bool LoopControl::init( const QString& filename ) { 354bool LoopControl::init( const QString& filename ) {
354 stop(); 355 stop();
355
356 audioMutex->lock(); 356 audioMutex->lock();
357 357
358 fileName = filename; 358 fileName = filename;
359 stream = 0; // only play stream 0 for now 359 stream = 0; // only play stream 0 for now
360 current_frame = total_video_frames = total_audio_samples = 0; 360 current_frame = total_video_frames = total_audio_samples = 0;
361 361
@@ -447,12 +447,14 @@ bool LoopControl::init( const QString& filename ) {
447 return TRUE; 447 return TRUE;
448} 448}
449 449
450 450
451void LoopControl::play() { 451void LoopControl::play() {
452 qDebug("LC- play"); 452 qDebug("LC- play");
453 mediaPlayerState->setPosition( 0); //uglyhack
454
453#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 455#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
454 if ( !disabledSuspendScreenSaver || previousSuspendMode != hasVideoChannel ) { 456 if ( !disabledSuspendScreenSaver || previousSuspendMode != hasVideoChannel ) {
455 disabledSuspendScreenSaver = TRUE; 457 disabledSuspendScreenSaver = TRUE;
456 previousSuspendMode = hasVideoChannel; 458 previousSuspendMode = hasVideoChannel;
457 // Stop the screen from blanking and power saving state 459 // Stop the screen from blanking and power saving state
458 QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) 460 QCopEnvelope("QPE/System", "setScreenSaverMode(int)" )