static bool al_get_buffer(al_t *al, ALuint *buffer) { if (al->res_ptr == 0) { #ifndef _WIN32 struct timespec tv = {0}; tv.tv_sec = 0; tv.tv_nsec = 1000000; #endif for (;;) { if (al_unqueue_buffers(al)) break; if (al->nonblock) return false; #ifdef _WIN32 Sleep(1); #else nanosleep(&tv, NULL); #endif } } *buffer = al->res_buf[--al->res_ptr]; return true; }
static bool al_get_buffer(al_t *al, ALuint *buffer) { if (!al->res_ptr) { for (;;) { if (al_unqueue_buffers(al)) break; if (al->nonblock) return false; // Must sleep as there is no proper blocking method. :( rarch_sleep(1); } } *buffer = al->res_buf[--al->res_ptr]; return true; }
static size_t al_write_avail(void *data) { al_t *al = (al_t*)data; al_unqueue_buffers(al); return al->res_ptr * BUFSIZE + (BUFSIZE - al->tmpbuf_ptr); }