author | llornkcor <llornkcor> | 2002-02-25 01:35:47 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-02-25 01:35:47 (UTC) |
commit | f180c1a5e8fc889ff1fb390d5cc94cdbc5085046 (patch) (unidiff) | |
tree | 5e9ea6f1313f4c33d57fb266523c1cfbe0826756 /core/multimedia/opieplayer/loopcontrol.cpp | |
parent | c0446b55fc32b7fdea9f58db06e40da703f5e8ff (diff) | |
download | opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.zip opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.tar.gz opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.tar.bz2 |
fucked up- no workie.. back out
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,7 +1,7 @@ | |||
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 |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
@@ -17,13 +17,12 @@ | |||
17 | ** not clear to you. | 17 | ** not clear to you. |
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> |
29 | #include <string.h> | 28 | #include <string.h> |
@@ -33,7 +32,6 @@ | |||
33 | #include "loopcontrol.h" | 32 | #include "loopcontrol.h" |
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 | ||
39 | 37 | ||
@@ -104,8 +102,10 @@ LoopControl::LoopControl( QObject *parent, const char *name ) | |||
104 | audioMutex = new Mutex; | 102 | audioMutex = new Mutex; |
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 ) { |
111 | sched_param params; | 111 | sched_param params; |
@@ -116,7 +116,10 @@ LoopControl::LoopControl( QObject *parent, const char *name ) | |||
116 | pthread_attr_destroy(&audio_attr); | 116 | pthread_attr_destroy(&audio_attr); |
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 | } |
122 | 125 | ||
@@ -231,14 +234,13 @@ void LoopControl::startAudio() { | |||
231 | qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); | 234 | qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); |
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; |
237 | 240 | ||
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 ); |
244 | currentSample = sampleWeShouldBeAt; | 246 | currentSample = sampleWeShouldBeAt; |
@@ -247,7 +249,7 @@ void LoopControl::startAudio() { | |||
247 | audioDevice->write( audioBuffer, samplesRead * 2 * channels ); | 249 | audioDevice->write( audioBuffer, samplesRead * 2 * channels ); |
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 { |
253 | 255 | ||
@@ -377,23 +379,23 @@ bool LoopControl::init( const QString& filename ) { | |||
377 | int astream = 0; | 379 | int astream = 0; |
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(); |
399 | 401 | ||