summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/alsa/alsa.c3
-rw-r--r--streamer.c17
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);
}
diff --git a/streamer.c b/streamer.c
index ca1d7857..6cc8d973 100644
--- a/streamer.c
+++ b/streamer.c
@@ -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;