diff options
-rw-r--r-- | plugins/alsa/alsa.c | 3 | ||||
-rw-r--r-- | streamer.c | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/plugins/alsa/alsa.c b/plugins/alsa/alsa.c index 834f8b0b..7a4d12ef 100644 --- a/plugins/alsa/alsa.c +++ b/plugins/alsa/alsa.c @@ -297,6 +297,9 @@ retry: plugin.fmt.channelmask = DDB_SPEAKER_FRONT_LEFT | DDB_SPEAKER_FRONT_RIGHT | DDB_SPEAKER_BACK_LEFT | DDB_SPEAKER_BACK_RIGHT | DDB_SPEAKER_FRONT_CENTER | DDB_SPEAKER_SIDE_LEFT | DDB_SPEAKER_SIDE_RIGHT | DDB_SPEAKER_LOW_FREQUENCY; } error: + if (err < 0) { + memset (&plugin.fmt, 0, sizeof (ddb_waveformat_t)); + } if (hw_params) { snd_pcm_hw_params_free (hw_params); } @@ -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; |