Diffstat (limited to 'core/multimedia/opieplayer/loopcontrol.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/loopcontrol.cpp | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp index dd466ed..90a7cc6 100644 --- a/core/multimedia/opieplayer/loopcontrol.cpp +++ b/core/multimedia/opieplayer/loopcontrol.cpp @@ -1,7 +1,7 @@ /********************************************************************** -** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** Copyright (C) 2000 Trolltech AS. All rights reserved. ** -** This file is part of the Qtopia Environment. +** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software @@ -17,12 +17,14 @@ ** not clear to you. ** **********************************************************************/ +// L.J.Potter added changes Fri 02-15-2002 + + #include <qpe/qpeapplication.h> -#ifdef Q_WS_QWS +#ifdef Q_WS_QWS #include <qpe/qcopenvelope_qws.h> #endif -#include <qpe/mediaplayerplugininterface.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -32,6 +34,7 @@ #include "loopcontrol.h" #include "videowidget.h" #include "audiodevice.h" +#include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" @@ -102,10 +105,8 @@ LoopControl::LoopControl( QObject *parent, const char *name ) audioMutex = new Mutex; pthread_attr_init(&audio_attr); - - if ( getuid() == 0 ) { - printf("true, guid = %i\n", getuid()); - +#define USE_REALTIME_AUDIO_THREAD +#ifdef USE_REALTIME_AUDIO_THREAD // Attempt to set it to real-time round robin if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) { sched_param params; @@ -116,10 +117,7 @@ LoopControl::LoopControl( QObject *parent, const char *name ) pthread_attr_destroy(&audio_attr); pthread_attr_init(&audio_attr); } - } -// printf("false, guid = %i\n", getuid()); - usleep( 100 ); - +#endif pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this); } @@ -234,13 +232,14 @@ void LoopControl::startAudio() { qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); long samplesRead = 0; - mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); + bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; long sampleWaitTime = currentSample - sampleWeShouldBeAt; if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); - } else if ( sampleWaitTime <= -5000 ) { + } + else if ( sampleWaitTime <= -5000 ) { qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); currentSample = sampleWeShouldBeAt; @@ -249,7 +248,7 @@ void LoopControl::startAudio() { audioDevice->write( audioBuffer, samplesRead * 2 * channels ); audioSampleCounter = currentSample + samplesRead - 1; - moreAudio = audioSampleCounter <= total_audio_samples; + moreAudio = readOk && (audioSampleCounter <= total_audio_samples); } else { @@ -379,23 +378,23 @@ bool LoopControl::init( const QString& filename ) { int astream = 0; channels = mediaPlayerState->curDecoder()->audioChannels( astream ); - DecodeLoopDebug(( "channels = %d\n", channels )); + qDebug( "LC- channels = %d", channels ); if ( !total_audio_samples ) total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); - total_audio_samples += 1000; +// total_audio_samples += 1000; mediaPlayerState->setLength( total_audio_samples ); freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); - DecodeLoopDebug(( "frequency = %d\n", freq )); + qDebug( "LC- frequency = %d", freq ); audioSampleCounter = 0; - static const int bytes_per_sample = 2; //16 bit + int bits_per_sample = mediaPlayerState->curDecoder()->audioBitsPerSample( astream); - audioDevice = new AudioDevice( freq, channels, bytes_per_sample ); + audioDevice = new AudioDevice( freq, channels, bits_per_sample); audioBuffer = new char[ audioDevice->bufferSize() ]; channels = audioDevice->channels(); |