Fixed GSF playback
parent
a8b01f16e3
commit
290ed6c239
|
@ -1199,24 +1199,36 @@ static int twosf_info(void * context, const char * name, const char * value)
|
||||||
GBASystem * system = ( GBASystem * ) emulatorCore;
|
GBASystem * system = ( GBASystem * ) emulatorCore;
|
||||||
struct gsf_sound_out * sound_out = ( struct gsf_sound_out * ) emulatorExtra;
|
struct gsf_sound_out * sound_out = ( struct gsf_sound_out * ) emulatorExtra;
|
||||||
|
|
||||||
if ( frames * 4 > sound_out->samples_written )
|
unsigned long frames_to_render = frames;
|
||||||
CPULoop( system, 250000 );
|
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
unsigned long frames_rendered = sound_out->samples_written / 4;
|
unsigned long frames_rendered = sound_out->samples_written / 4;
|
||||||
|
|
||||||
if ( frames_rendered >= frames )
|
if ( frames_rendered >= frames_to_render )
|
||||||
{
|
{
|
||||||
memcpy( buf, sound_out->buffer, frames * 4 );
|
memcpy( buf, sound_out->buffer, frames_to_render * 4 );
|
||||||
frames_rendered -= frames;
|
frames_rendered -= frames_to_render;
|
||||||
memcpy( sound_out->buffer, sound_out->buffer + frames * 4, frames_rendered * 4 );
|
memcpy( sound_out->buffer, sound_out->buffer + frames_to_render * 4, frames_rendered * 4 );
|
||||||
|
frames_to_render = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy( buf, sound_out->buffer, frames_rendered * 4 );
|
memcpy( buf, sound_out->buffer, frames_rendered * 4 );
|
||||||
frames = (UInt32)frames_rendered;
|
frames_to_render -= frames_rendered;
|
||||||
frames_rendered = 0;
|
frames_rendered = 0;
|
||||||
}
|
}
|
||||||
sound_out->samples_written = frames_rendered;
|
sound_out->samples_written = frames_rendered * 4;
|
||||||
|
|
||||||
|
if ( frames_to_render )
|
||||||
|
{
|
||||||
|
CPULoop( system, 250000 );
|
||||||
|
if ( !sound_out->samples_written )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ( frames_to_render );
|
||||||
|
frames -= (UInt32) frames_to_render;
|
||||||
}
|
}
|
||||||
else if ( type == 0x24 )
|
else if ( type == 0x24 )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue