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_setformat (ddb_waveformat_t *fmt) { int st = state; memcpy (&requested_fmt, fmt, sizeof (ddb_waveformat_t)); if (!s || !memcmp (fmt, &plugin.fmt, sizeof (ddb_waveformat_t))) { return 0; } pulse_free (); pulse_init (); int res = 0; if (st == OUTPUT_STATE_PLAYING) { res = pulse_play (); } else if (st == OUTPUT_STATE_PAUSED) { res = pulse_pause (); } return res; }