Diffstat (limited to 'core/multimedia/opieplayer/loopcontrol.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/loopcontrol.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp index 1ae0059..dd466ed 100644 --- a/core/multimedia/opieplayer/loopcontrol.cpp +++ b/core/multimedia/opieplayer/loopcontrol.cpp | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
@@ -18,11 +18,10 @@ | |||
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | // L.J.Potter added changes Fri 02-15-2002 | ||
21 | |||
22 | #include <qpe/qpeapplication.h> | 20 | #include <qpe/qpeapplication.h> |
23 | |||
24 | #ifdef Q_WS_QWS | 21 | #ifdef Q_WS_QWS |
22 | |||
25 | #include <qpe/qcopenvelope_qws.h> | 23 | #include <qpe/qcopenvelope_qws.h> |
26 | #endif | 24 | #endif |
25 | #include <qpe/mediaplayerplugininterface.h> | ||
27 | #include <stdio.h> | 26 | #include <stdio.h> |
28 | #include <stdlib.h> | 27 | #include <stdlib.h> |
@@ -34,5 +33,4 @@ | |||
34 | #include "videowidget.h" | 33 | #include "videowidget.h" |
35 | #include "audiodevice.h" | 34 | #include "audiodevice.h" |
36 | #include "mediaplayerplugininterface.h" | ||
37 | #include "mediaplayerstate.h" | 35 | #include "mediaplayerstate.h" |
38 | 36 | ||
@@ -105,6 +103,8 @@ LoopControl::LoopControl( QObject *parent, const char *name ) | |||
105 | 103 | ||
106 | pthread_attr_init(&audio_attr); | 104 | pthread_attr_init(&audio_attr); |
107 | #define USE_REALTIME_AUDIO_THREAD | 105 | |
108 | #ifdef USE_REALTIME_AUDIO_THREAD | 106 | if ( getuid() == 0 ) { |
107 | printf("true, guid = %i\n", getuid()); | ||
108 | |||
109 | // Attempt to set it to real-time round robin | 109 | // Attempt to set it to real-time round robin |
110 | if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) { | 110 | if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) { |
@@ -117,5 +117,8 @@ LoopControl::LoopControl( QObject *parent, const char *name ) | |||
117 | pthread_attr_init(&audio_attr); | 117 | pthread_attr_init(&audio_attr); |
118 | } | 118 | } |
119 | #endif | 119 | } |
120 | // printf("false, guid = %i\n", getuid()); | ||
121 | usleep( 100 ); | ||
122 | |||
120 | pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this); | 123 | pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this); |
121 | } | 124 | } |
@@ -232,5 +235,5 @@ void LoopControl::startAudio() { | |||
232 | 235 | ||
233 | long samplesRead = 0; | 236 | long samplesRead = 0; |
234 | bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); | 237 | mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); |
235 | long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; | 238 | long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; |
236 | long sampleWaitTime = currentSample - sampleWeShouldBeAt; | 239 | long sampleWaitTime = currentSample - sampleWeShouldBeAt; |
@@ -238,6 +241,5 @@ void LoopControl::startAudio() { | |||
238 | if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { | 241 | if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { |
239 | usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); | 242 | usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); |
240 | } | 243 | } else if ( sampleWaitTime <= -5000 ) { |
241 | else if ( sampleWaitTime <= -5000 ) { | ||
242 | qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); | 244 | qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); |
243 | //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); | 245 | //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); |
@@ -248,5 +250,5 @@ void LoopControl::startAudio() { | |||
248 | audioSampleCounter = currentSample + samplesRead - 1; | 250 | audioSampleCounter = currentSample + samplesRead - 1; |
249 | 251 | ||
250 | moreAudio = readOk && (audioSampleCounter <= total_audio_samples); | 252 | moreAudio = audioSampleCounter <= total_audio_samples; |
251 | 253 | ||
252 | } else { | 254 | } else { |
@@ -378,21 +380,21 @@ bool LoopControl::init( const QString& filename ) { | |||
378 | 380 | ||
379 | channels = mediaPlayerState->curDecoder()->audioChannels( astream ); | 381 | channels = mediaPlayerState->curDecoder()->audioChannels( astream ); |
380 | qDebug( "LC- channels = %d", channels ); | 382 | DecodeLoopDebug(( "channels = %d\n", channels )); |
381 | 383 | ||
382 | if ( !total_audio_samples ) | 384 | if ( !total_audio_samples ) |
383 | total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); | 385 | total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); |
384 | 386 | ||
385 | // total_audio_samples += 1000; | 387 | total_audio_samples += 1000; |
386 | 388 | ||
387 | mediaPlayerState->setLength( total_audio_samples ); | 389 | mediaPlayerState->setLength( total_audio_samples ); |
388 | 390 | ||
389 | freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); | 391 | freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); |
390 | qDebug( "LC- frequency = %d", freq ); | 392 | DecodeLoopDebug(( "frequency = %d\n", freq )); |
391 | 393 | ||
392 | audioSampleCounter = 0; | 394 | audioSampleCounter = 0; |
393 | 395 | ||
394 | int bits_per_sample = mediaPlayerState->curDecoder()->audioBitsPerSample( astream); | 396 | static const int bytes_per_sample = 2; //16 bit |
395 | 397 | ||
396 | audioDevice = new AudioDevice( freq, channels, bits_per_sample); | 398 | audioDevice = new AudioDevice( freq, channels, bytes_per_sample ); |
397 | audioBuffer = new char[ audioDevice->bufferSize() ]; | 399 | audioBuffer = new char[ audioDevice->bufferSize() ]; |
398 | channels = audioDevice->channels(); | 400 | channels = audioDevice->channels(); |