diff options
author | waker <wakeroid@gmail.com> | 2011-01-09 22:13:26 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2011-01-09 22:13:26 +0100 |
commit | 4ab86e6c2a7d920f022d0d6a8bf2343929dfb0a8 (patch) | |
tree | 054f4a300b601e0f3e6b73cce77400cab969c884 /streamer.c | |
parent | 14b81d3a1a90fe4a3bc0ef39f5bb45125d8eebc5 (diff) |
fixed streamer recovery from failed output plugin setformat/play
Diffstat (limited to 'streamer.c')
-rw-r--r-- | streamer.c | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -827,11 +827,22 @@ streamer_start_new_song (void) { streamer_reset (1); if (!dsp_on && fileinfo && memcmp (&output_format, &fileinfo->fmt, sizeof (ddb_waveformat_t))) { memcpy (&output_format, &fileinfo->fmt, sizeof (ddb_waveformat_t)); + fprintf (stderr, "streamer_set_output_format %dbit %s %dch %dHz channelmask=%X\n", output_format.bps, output_format.is_float ? "float" : "int", output_format.channels, output_format.samplerate, output_format.channelmask); + streamer_set_output_format (); + } + else if (output->state () != OUTPUT_STATE_PLAYING) { + // might have failed last time, set default params + output_format.bps = 16; + output_format.is_float = 0; + output_format.channels = 2; + output_format.samplerate = 44100; + output_format.channelmask = 3; streamer_set_output_format (); } if (output->state () != OUTPUT_STATE_PLAYING) { if (0 != output->play ()) { - fprintf (stderr, "streamer: failed to start playback (streamer_read format change)\n"); + memset (&output_format, 0, sizeof (output_format)); + fprintf (stderr, "streamer: failed to start playback (start track)\n"); streamer_set_nextsong (-2, 0); } } @@ -964,6 +975,7 @@ streamer_thread (void *ctx) { streamer_reset (1); if (output->state () != OUTPUT_STATE_PLAYING) { if (0 != output->play ()) { + memset (&output_format, 0, sizeof (output_format)); fprintf (stderr, "streamer: failed to start playback (track transition format change)\n"); streamer_set_nextsong (-2, 0); } @@ -1495,9 +1507,12 @@ static int streamer_set_output_format (void) { DB_output_t *output = plug_get_output (); int playing = (output->state () == OUTPUT_STATE_PLAYING); + + fprintf (stderr, "streamer_set_output_format %dbit %s %dch %dHz channelmask=%X\n", output_format.bps, output_format.is_float ? "float" : "int", output_format.channels, output_format.samplerate, output_format.channelmask); output->setformat (&output_format); if (playing && output->state () != OUTPUT_STATE_PLAYING) { if (0 != output->play ()) { + memset (&output_format, 0, sizeof (output_format)); fprintf (stderr, "streamer: failed to start playback (streamer_read format change)\n"); streamer_set_nextsong (-2, 0); return -1; |