static int oss_setformat (ddb_waveformat_t *fmt) { trace ("oss_setformat\n"); if (!fd) { memcpy (&plugin.fmt, fmt, sizeof (ddb_waveformat_t)); } if (!memcmp (fmt, &plugin.fmt, sizeof (ddb_waveformat_t))) { return 0; } int _state = state; int v4workaround = deadbeef->conf_get_int ("oss.v4workaround", 0); deadbeef->mutex_lock (mutex); if (v4workaround) { if (fd) { close (fd); fd = 0; } fd = open (oss_device, O_WRONLY); memcpy (&plugin.fmt, fmt, sizeof (ddb_waveformat_t)); } if (0 != oss_set_hwparams (fmt)) { deadbeef->mutex_unlock (mutex); return -1; } deadbeef->mutex_unlock (mutex); switch (_state) { case OUTPUT_STATE_STOPPED: return oss_stop (); case OUTPUT_STATE_PLAYING: return oss_play (); case OUTPUT_STATE_PAUSED: if (0 != oss_play ()) { return -1; } if (0 != oss_pause ()) { return -1; } break; } return 0; }
static void oss_check_fds(fd_set * rfds, fd_set * wfds) { if (FD_ISSET(dsp_fd, wfds)) oss_play(); if (FD_ISSET(dsp_fd, rfds)) oss_record(); }
static void oss_resume(void) { int fillcnt; oss_reset(); fillcnt = oss_get_space() - prepause_space; if(fillcnt > 0){ void *silence = calloc(fillcnt, 1); oss_play(silence, fillcnt); free(silence); } }
static int oss_unpause (void) { oss_play (); return 0; }