summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/loopcontrol.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp
index 70e4a78..ba14882 100644
--- a/core/multimedia/opieplayer/loopcontrol.cpp
+++ b/core/multimedia/opieplayer/loopcontrol.cpp
@@ -191,104 +191,106 @@ void LoopControl::startVideo() {
191 191
192 current_frame = long( playtime.elapsed() * framerate / 1000 ); 192 current_frame = long( playtime.elapsed() * framerate / 1000 );
193 193
194 if ( prev_frame != -1 && current_frame <= prev_frame ) 194 if ( prev_frame != -1 && current_frame <= prev_frame )
195 return; 195 return;
196 196
197 } else { 197 } else {
198 // Don't skip 198 // Don't skip
199 current_frame++; 199 current_frame++;
200 } 200 }
201 201
202 if ( prev_frame == -1 || current_frame > prev_frame ) { 202 if ( prev_frame == -1 || current_frame > prev_frame ) {
203 if ( current_frame > prev_frame + 1 ) { 203 if ( current_frame > prev_frame + 1 ) {
204 mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); 204 mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
205 } 205 }
206 moreVideo = videoUI->playVideo(); 206 moreVideo = videoUI->playVideo();
207 prev_frame = current_frame; 207 prev_frame = current_frame;
208 } 208 }
209 209
210 } else { 210 } else {
211 211
212 moreVideo = FALSE; 212 moreVideo = FALSE;
213 killTimer( videoId ); 213 killTimer( videoId );
214 214
215 } 215 }
216 216
217 } 217 }
218} 218}
219 219
220 220
221void LoopControl::startAudio() { 221void LoopControl::startAudio() {
222 222
223 audioMutex->lock(); 223 audioMutex->lock();
224 if ( moreAudio ) { 224 if ( moreAudio ) {
225 225
226 if ( !isMuted && mediaPlayerState->curDecoder() ) { 226 if ( !isMuted && mediaPlayerState->curDecoder() ) {
227 227
228 currentSample = audioSampleCounter + 1; 228 currentSample = audioSampleCounter + 1;
229 229
230 if ( currentSample != audioSampleCounter + 1 ) 230 if ( currentSample != audioSampleCounter + 1 )
231 qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); 231 qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter);
232 232
233 long samplesRead = 0; 233 long samplesRead = 0;
234 bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); 234 bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream );
235 long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; 235 long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000;
236 long sampleWaitTime = currentSample - sampleWeShouldBeAt; 236 long sampleWaitTime = currentSample - sampleWeShouldBeAt;
237 237
238// this causes drop outs not sure why its even here 238// this causes drop outs not sure why its even here
239// if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { 239 if ( hasVideoChannel ) {
240// usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); 240 if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) {
241// } 241 usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) );
242// else if ( sampleWaitTime <= -5000 ) { 242 }
243// qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); 243 else if ( sampleWaitTime <= -5000 ) {
244// // //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); 244 qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt );
245// currentSample = sampleWeShouldBeAt; 245 // //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream );
246// } 246 currentSample = sampleWeShouldBeAt;
247 }
248}
247 249
248 audioDevice->write( audioBuffer, samplesRead * 2 * channels ); 250 audioDevice->write( audioBuffer, samplesRead * 2 * channels );
249 251
250 if( mediaPlayerState->isStreaming == FALSE) 252 if( mediaPlayerState->isStreaming == FALSE)
251 audioSampleCounter = currentSample + samplesRead - 1; 253 audioSampleCounter = currentSample + samplesRead - 1;
252 254
253 moreAudio = readOk && (audioSampleCounter <= total_audio_samples); 255 moreAudio = readOk && (audioSampleCounter <= total_audio_samples);
254 256
255 } else { 257 } else {
256 258
257 moreAudio = FALSE; 259 moreAudio = FALSE;
258 260
259 } 261 }
260 262
261 } 263 }
262 264
263 audioMutex->unlock(); 265 audioMutex->unlock();
264} 266}
265 267
266 268
267void LoopControl::killTimers() { 269void LoopControl::killTimers() {
268 270
269 audioMutex->lock(); 271 audioMutex->lock();
270 272
271 if ( hasVideoChannel ) 273 if ( hasVideoChannel )
272 killTimer( videoId ); 274 killTimer( videoId );
273 killTimer( sliderId ); 275 killTimer( sliderId );
274 threadOkToGo = FALSE; 276 threadOkToGo = FALSE;
275 277
276 audioMutex->unlock(); 278 audioMutex->unlock();
277} 279}
278 280
279 281
280void LoopControl::startTimers() { 282void LoopControl::startTimers() {
281 283
282 audioMutex->lock(); 284 audioMutex->lock();
283 285
284 moreVideo = FALSE; 286 moreVideo = FALSE;
285 moreAudio = FALSE; 287 moreAudio = FALSE;
286 288
287 if ( hasVideoChannel ) { 289 if ( hasVideoChannel ) {
288 moreVideo = TRUE; 290 moreVideo = TRUE;
289 int mSecsBetweenFrames = (int)(100 / framerate); // 10% of the real value 291 int mSecsBetweenFrames = (int)(100 / framerate); // 10% of the real value
290 videoId = startTimer( mSecsBetweenFrames ); 292 videoId = startTimer( mSecsBetweenFrames );
291 } 293 }
292 294
293 if ( hasAudioChannel ) { 295 if ( hasAudioChannel ) {
294 moreAudio = TRUE; 296 moreAudio = TRUE;