static int pulse_setformat (ddb_waveformat_t *fmt) { memcpy (&requested_fmt, fmt, sizeof (ddb_waveformat_t)); if (!s) { return -1; } if (!memcmp (fmt, &plugin.fmt, sizeof (ddb_waveformat_t))) { trace ("pulse_setformat ignored\n"); return 0; } trace ("pulse_setformat %dbit %s %dch %dHz channelmask=%X\n", fmt->bps, fmt->is_float ? "float" : "int", fmt->channels, fmt->samplerate, fmt->channelmask); int prev_state = state; pulse_stop (); deadbeef->mutex_lock(mutex); pulse_set_spec(fmt); deadbeef->mutex_unlock(mutex); trace ("new format %dbit %s %dch %dHz channelmask=%X\n", plugin.fmt.bps, plugin.fmt.is_float ? "float" : "int", plugin.fmt.channels, plugin.fmt.samplerate, plugin.fmt.channelmask); switch (prev_state) { case OUTPUT_STATE_STOPPED: return pulse_stop (); case OUTPUT_STATE_PLAYING: return pulse_play (); case OUTPUT_STATE_PAUSED: if (0 != pulse_play ()) { return -1; } if (0 != pulse_pause ()) { return -1; } break; } return 0; }
static int pulse_init(void) { trace ("pulse_init\n"); state = OUTPUT_STATE_STOPPED; pulse_terminate = 0; if (requested_fmt.samplerate != 0) { memcpy (&plugin.fmt, &requested_fmt, sizeof (ddb_waveformat_t)); } if (0 != pulse_set_spec(&plugin.fmt)) { return -1; } pulse_tid = deadbeef->thread_start(pulse_thread, NULL); return 0; }