mirror of https://github.com/odrling/Aegisub
Use some black magic (GOTO) to fix #915. See comments in code for explanation.
Originally committed to SVN as r3732.
This commit is contained in:
parent
99659ef5a4
commit
a0bfd9ff7c
|
@ -328,6 +328,13 @@ void DirectSoundPlayer2Thread::Run()
|
||||||
ResetEvent(is_playing);
|
ResetEvent(is_playing);
|
||||||
playback_should_be_running = false;
|
playback_should_be_running = false;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the user is dragging the start or end point in the audio display
|
||||||
|
// the set end frame events might come in faster than the timeouts happen
|
||||||
|
// and then new data never get filled into the buffer. See bug #915.
|
||||||
|
goto do_fill_buffer;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +344,7 @@ void DirectSoundPlayer2Thread::Run()
|
||||||
// We aren't thread safe right now, filling the buffers grabs volume directly
|
// We aren't thread safe right now, filling the buffers grabs volume directly
|
||||||
// from the field set by the controlling thread, but it shouldn't be a major
|
// from the field set by the controlling thread, but it shouldn't be a major
|
||||||
// problem if race conditions do occur, just some momentary distortion.
|
// problem if race conditions do occur, just some momentary distortion.
|
||||||
break;
|
goto do_fill_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WAIT_OBJECT_0+4:
|
case WAIT_OBJECT_0+4:
|
||||||
|
@ -351,6 +358,7 @@ void DirectSoundPlayer2Thread::Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
case WAIT_TIMEOUT:
|
case WAIT_TIMEOUT:
|
||||||
|
do_fill_buffer:
|
||||||
{
|
{
|
||||||
// Time to fill more into buffer
|
// Time to fill more into buffer
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue