summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/loopcontrol.cpp
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/loopcontrol.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/loopcontrol.cpp38
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,8 +1,8 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the 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
** Foundation and appearing in the file LICENSE.GPL included in the
@@ -16,15 +16,14 @@
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-// L.J.Potter added changes Fri 02-15-2002
-
#include <qpe/qpeapplication.h>
-
#ifdef Q_WS_QWS
+
#include <qpe/qcopenvelope_qws.h>
#endif
+#include <qpe/mediaplayerplugininterface.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
@@ -32,9 +31,8 @@
#include <unistd.h>
#include "loopcontrol.h"
#include "videowidget.h"
#include "audiodevice.h"
-#include "mediaplayerplugininterface.h"
#include "mediaplayerstate.h"
extern VideoWidget *videoUI; // now only needed to tell it to play a frame
@@ -103,10 +101,12 @@ LoopControl::LoopControl( QObject *parent, const char *name )
audioMutex = new Mutex;
pthread_attr_init(&audio_attr);
-#define USE_REALTIME_AUDIO_THREAD
-#ifdef USE_REALTIME_AUDIO_THREAD
+
+ if ( getuid() == 0 ) {
+ printf("true, guid = %i\n", getuid());
+
// Attempt to set it to real-time round robin
if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) {
sched_param params;
params.sched_priority = 50;
@@ -115,9 +115,12 @@ LoopControl::LoopControl( QObject *parent, const char *name )
qDebug( "Error setting up a realtime thread, reverting to using a normal thread." );
pthread_attr_destroy(&audio_attr);
pthread_attr_init(&audio_attr);
}
-#endif
+ }
+// printf("false, guid = %i\n", getuid());
+ usleep( 100 );
+
pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this);
}
@@ -230,25 +233,24 @@ void LoopControl::startAudio() {
if ( currentSample != audioSampleCounter + 1 )
qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter);
long samplesRead = 0;
- bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream );
+ 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;
}
audioDevice->write( audioBuffer, samplesRead * 2 * channels );
audioSampleCounter = currentSample + samplesRead - 1;
- moreAudio = readOk && (audioSampleCounter <= total_audio_samples);
+ moreAudio = audioSampleCounter <= total_audio_samples;
} else {
moreAudio = FALSE;
@@ -376,25 +378,25 @@ bool LoopControl::init( const QString& filename ) {
if ( hasAudioChannel ) {
int astream = 0;
channels = mediaPlayerState->curDecoder()->audioChannels( astream );
- qDebug( "LC- channels = %d", channels );
+ DecodeLoopDebug(( "channels = %d\n", 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 );
- qDebug( "LC- frequency = %d", freq );
+ DecodeLoopDebug(( "frequency = %d\n", freq ));
audioSampleCounter = 0;
- int bits_per_sample = mediaPlayerState->curDecoder()->audioBitsPerSample( astream);
+ static const int bytes_per_sample = 2; //16 bit
- audioDevice = new AudioDevice( freq, channels, bits_per_sample);
+ audioDevice = new AudioDevice( freq, channels, bytes_per_sample );
audioBuffer = new char[ audioDevice->bufferSize() ];
channels = audioDevice->channels();
//### must check which frequency is actually used.