Remove the AUTO bit-depth setting. It's a hack and needs more consideration.
This commit is contained in:
+44
-78
@@ -339,83 +339,51 @@ int actual_open_alsa_device(void) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
if (sample_format == SPS_FORMAT_AUTO) {
|
||||
|
||||
struct alsa_formats {
|
||||
snd_pcm_format_t alsa_sound_format;
|
||||
enum sps_format_t sps_sound_format;
|
||||
int frame_size;
|
||||
char * description;
|
||||
};
|
||||
|
||||
struct alsa_formats formats[] = {{SND_PCM_FORMAT_S32,SPS_FORMAT_S32,8,"S32"},
|
||||
{SND_PCM_FORMAT_S24,SPS_FORMAT_S24,8,"S24"},
|
||||
{SND_PCM_FORMAT_S24_3LE,SPS_FORMAT_S24_3LE,6,"S24_LE"},
|
||||
{SND_PCM_FORMAT_S24_3BE,SPS_FORMAT_S24_3BE,6,"S24_BE"},
|
||||
{SND_PCM_FORMAT_S16,SPS_FORMAT_S16,4,"S16"}};
|
||||
|
||||
int acceptable_format_found = 0;
|
||||
unsigned int i = 0;
|
||||
while((!acceptable_format_found) && (i < sizeof(formats) / sizeof(formats[0]))) {
|
||||
if (snd_pcm_hw_params_set_format(alsa_handle, alsa_params, formats[i].alsa_sound_format) == 0) {
|
||||
acceptable_format_found = 1;
|
||||
frame_size = formats[i].frame_size;
|
||||
config.output_format = formats[i].sps_sound_format;
|
||||
debug(1,"alsa: output format automatically chosen to be \"%s\".",formats[i].description);
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (!acceptable_format_found) {
|
||||
die("Can't find a suitable automatic output format setting.");
|
||||
}
|
||||
} else {
|
||||
snd_pcm_format_t sf;
|
||||
switch (sample_format) {
|
||||
case SPS_FORMAT_S8:
|
||||
sf = SND_PCM_FORMAT_S8;
|
||||
frame_size = 2;
|
||||
break;
|
||||
case SPS_FORMAT_U8:
|
||||
sf = SND_PCM_FORMAT_U8;
|
||||
frame_size = 2;
|
||||
break;
|
||||
case SPS_FORMAT_S16:
|
||||
sf = SND_PCM_FORMAT_S16;
|
||||
frame_size = 4;
|
||||
break;
|
||||
case SPS_FORMAT_S24:
|
||||
sf = SND_PCM_FORMAT_S24;
|
||||
frame_size = 8;
|
||||
break;
|
||||
case SPS_FORMAT_S24_3LE:
|
||||
sf = SND_PCM_FORMAT_S24_3LE;
|
||||
frame_size = 6;
|
||||
break;
|
||||
case SPS_FORMAT_S24_3BE:
|
||||
sf = SND_PCM_FORMAT_S24_3BE;
|
||||
frame_size = 6;
|
||||
break;
|
||||
case SPS_FORMAT_S32:
|
||||
sf = SND_PCM_FORMAT_S32;
|
||||
frame_size = 8;
|
||||
break;
|
||||
default:
|
||||
sf = SND_PCM_FORMAT_S16; // this is just to quieten a compiler warning
|
||||
frame_size = 4;
|
||||
debug(1, "Unsupported output format at audio_alsa.c");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = snd_pcm_hw_params_set_format(alsa_handle, alsa_params, sf);
|
||||
if (ret < 0) {
|
||||
warn("audio_alsa: Sample format %d not available for device \"%s\": %s", sample_format,
|
||||
alsa_out_dev, snd_strerror(ret));
|
||||
return ret;
|
||||
}
|
||||
snd_pcm_format_t sf;
|
||||
switch (sample_format) {
|
||||
case SPS_FORMAT_S8:
|
||||
sf = SND_PCM_FORMAT_S8;
|
||||
frame_size = 2;
|
||||
break;
|
||||
case SPS_FORMAT_U8:
|
||||
sf = SND_PCM_FORMAT_U8;
|
||||
frame_size = 2;
|
||||
break;
|
||||
case SPS_FORMAT_S16:
|
||||
sf = SND_PCM_FORMAT_S16;
|
||||
frame_size = 4;
|
||||
break;
|
||||
case SPS_FORMAT_S24:
|
||||
sf = SND_PCM_FORMAT_S24;
|
||||
frame_size = 8;
|
||||
break;
|
||||
case SPS_FORMAT_S24_3LE:
|
||||
sf = SND_PCM_FORMAT_S24_3LE;
|
||||
frame_size = 6;
|
||||
break;
|
||||
case SPS_FORMAT_S24_3BE:
|
||||
sf = SND_PCM_FORMAT_S24_3BE;
|
||||
frame_size = 6;
|
||||
break;
|
||||
case SPS_FORMAT_S32:
|
||||
sf = SND_PCM_FORMAT_S32;
|
||||
frame_size = 8;
|
||||
break;
|
||||
default:
|
||||
sf = SND_PCM_FORMAT_S16; // this is just to quieten a compiler warning
|
||||
frame_size = 4;
|
||||
debug(1, "Unsupported output format at audio_alsa.c");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = snd_pcm_hw_params_set_format(alsa_handle, alsa_params, sf);
|
||||
if (ret < 0) {
|
||||
warn("audio_alsa: Sample format %d not available for device \"%s\": %s", sample_format,
|
||||
alsa_out_dev, snd_strerror(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
if (set_period_size_request != 0) {
|
||||
debug(1, "Attempting to set the period size");
|
||||
ret = snd_pcm_hw_params_set_period_size_near(alsa_handle, alsa_params, &period_size_requested,
|
||||
@@ -934,10 +902,8 @@ static int init(int argc, char **argv) {
|
||||
config.output_format = SPS_FORMAT_U8;
|
||||
else if (strcasecmp(str, "S8") == 0)
|
||||
config.output_format = SPS_FORMAT_S8;
|
||||
else if (strcasecmp(str, "AUTOMATIC") == 0)
|
||||
config.output_format = SPS_FORMAT_AUTO;
|
||||
else {
|
||||
warn("Invalid output format \"%s\". It should be \"Automatic\", \"U8\", \"S8\", "
|
||||
warn("Invalid output format \"%s\". It should be \"U8\", \"S8\", "
|
||||
"\"S16\", \"S24\", "
|
||||
"\"S24_3LE\", \"S24_3BE\" or "
|
||||
"\"S32\". It is set to \"S16\".",
|
||||
|
||||
@@ -1391,8 +1391,6 @@ int64_t generate_zero_frames(char *outp, size_t number_of_frames, enum sps_forma
|
||||
case SPS_FORMAT_UNKNOWN:
|
||||
die("Unexpected SPS_FORMAT_UNKNOWN while calculating dither mask.");
|
||||
break;
|
||||
case SPS_FORMAT_AUTO:
|
||||
die("Unexpected SPS_FORMAT_AUTO while calculating dither mask.");
|
||||
}
|
||||
dither_mask -= 1;
|
||||
// int64_t r = r64i();
|
||||
|
||||
@@ -80,7 +80,6 @@ enum sps_format_t {
|
||||
SPS_FORMAT_S24_3LE,
|
||||
SPS_FORMAT_S24_3BE,
|
||||
SPS_FORMAT_S32,
|
||||
SPS_FORMAT_AUTO,
|
||||
} sps_format_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -683,9 +683,6 @@ static inline void process_sample(int32_t sample, char **outp, enum sps_format_t
|
||||
case SPS_FORMAT_UNKNOWN:
|
||||
die("Unexpected SPS_FORMAT_UNKNOWN while calculating dither mask.");
|
||||
break;
|
||||
case SPS_FORMAT_AUTO:
|
||||
die("Unexpected SPS_FORMAT_AUTO while calculating dither mask.");
|
||||
break;
|
||||
}
|
||||
dither_mask -= 1;
|
||||
// int64_t r = r64i();
|
||||
@@ -763,9 +760,6 @@ static inline void process_sample(int32_t sample, char **outp, enum sps_format_t
|
||||
case SPS_FORMAT_UNKNOWN:
|
||||
die("Unexpected SPS_FORMAT_UNKNOWN while outputting samples");
|
||||
break;
|
||||
case SPS_FORMAT_AUTO:
|
||||
die("Unexpected SPS_FORMAT_AUTO while outputting samples");
|
||||
break;
|
||||
}
|
||||
|
||||
*outp += result;
|
||||
@@ -1653,9 +1647,6 @@ void *player_thread_func(void *arg) {
|
||||
case SPS_FORMAT_UNKNOWN:
|
||||
die("Unknown format choosing output bit depth");
|
||||
break;
|
||||
case SPS_FORMAT_AUTO:
|
||||
die("Unexpected SPS_FORMAT_AUTO while outputting samples");
|
||||
break;
|
||||
}
|
||||
|
||||
debug(3, "Output bit depth is %d.", output_bit_depth);
|
||||
|
||||
+1
-1
@@ -1577,7 +1577,7 @@ int main(int argc, char **argv) {
|
||||
debug(1, "use_mmap_if_available is %d.", config.no_mmap ? 0 : 1);
|
||||
debug(1, "output_rate is %d.", config.output_rate);
|
||||
debug(1,
|
||||
"output_format is %d (0-unknown, 1-S8, 2-U8, 3-S16, 4-S24, 5-S24_3LE, 6-S24_3BE, 7-S32, 8-Automatic).",
|
||||
"output_format is %d (0-unknown, 1-S8, 2-U8, 3-S16, 4-S24, 5-S24_3LE, 6-S24_3BE, 7-S32).",
|
||||
config.output_format);
|
||||
debug(1, "audio backend desired buffer length is %f seconds.",
|
||||
config.audio_backend_buffer_desired_length);
|
||||
|
||||
Reference in New Issue
Block a user