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.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,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();