mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-04 13:30:08 -05:00
Add verbose hw_params debugging
Added the verbose hw_params dump for debugging. The verbose error message is shown with the current hw_params dump when $LIBASOUND_DEBUG is set.
This commit is contained in:
parent
0aed1ab2af
commit
b579a024db
1 changed files with 55 additions and 3 deletions
|
|
@ -21,6 +21,42 @@
|
||||||
|
|
||||||
#include "pcm_local.h"
|
#include "pcm_local.h"
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
/*
|
||||||
|
* dump hw_params when $LIBASOUND_DEBUG is set
|
||||||
|
*/
|
||||||
|
static void dump_hw_params(snd_pcm_hw_params_t *params, const char *type,
|
||||||
|
snd_pcm_hw_param_t var, unsigned int val, int err)
|
||||||
|
{
|
||||||
|
const char *verbose = getenv("LIBASOUND_DEBUG");
|
||||||
|
snd_output_t *out;
|
||||||
|
|
||||||
|
if (! verbose || ! *verbose)
|
||||||
|
return;
|
||||||
|
if (snd_output_stdio_attach(&out, stderr, 0) < 0)
|
||||||
|
return;
|
||||||
|
fprintf(stderr, "ALSA ERROR hw_params: %s (%s)\n",
|
||||||
|
type, snd_pcm_hw_param_name(var));
|
||||||
|
fprintf(stderr, " value = ");
|
||||||
|
switch (var) {
|
||||||
|
case SND_PCM_HW_PARAM_ACCESS:
|
||||||
|
fprintf(stderr, "%s", snd_pcm_access_name(val));
|
||||||
|
break;
|
||||||
|
case SND_PCM_HW_PARAM_FORMAT:
|
||||||
|
fprintf(stderr, "%s", snd_pcm_format_name(val));
|
||||||
|
break;
|
||||||
|
case SND_PCM_HW_PARAM_SUBFORMAT:
|
||||||
|
fprintf(stderr, "%s", snd_pcm_subformat_name(val));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "%u", val);
|
||||||
|
}
|
||||||
|
fprintf(stderr, " : %s\n", snd_strerror(err));
|
||||||
|
snd_pcm_hw_params_dump(params, out);
|
||||||
|
snd_output_close(out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline int hw_is_mask(snd_pcm_hw_param_t var)
|
static inline int hw_is_mask(snd_pcm_hw_param_t var)
|
||||||
{
|
{
|
||||||
#if SND_PCM_HW_PARAM_FIRST_MASK == 0
|
#if SND_PCM_HW_PARAM_FIRST_MASK == 0
|
||||||
|
|
@ -438,6 +474,8 @@ int snd_pcm_hw_param_set_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
_fail:
|
_fail:
|
||||||
if (mode == SND_TRY)
|
if (mode == SND_TRY)
|
||||||
*params = save;
|
*params = save;
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set_min", var, *val, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -513,6 +551,8 @@ int snd_pcm_hw_param_set_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
_fail:
|
_fail:
|
||||||
if (mode == SND_TRY)
|
if (mode == SND_TRY)
|
||||||
*params = save;
|
*params = save;
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set_max", var, *val, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -625,6 +665,8 @@ int snd_pcm_hw_param_set_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
_fail:
|
_fail:
|
||||||
if (mode == SND_TRY)
|
if (mode == SND_TRY)
|
||||||
*params = save;
|
*params = save;
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set_minmax", var, *min, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -713,6 +755,8 @@ int snd_pcm_hw_param_set(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
_fail:
|
_fail:
|
||||||
if (mode == SND_TRY)
|
if (mode == SND_TRY)
|
||||||
*params = save;
|
*params = save;
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set", var, val, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -807,8 +851,12 @@ int snd_pcm_hw_param_set_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
err = snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, var, &min, &mindir);
|
err = snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, var, &min, &mindir);
|
||||||
|
|
||||||
i = hw_param_interval(params, var);
|
i = hw_param_interval(params, var);
|
||||||
if (!snd_interval_empty(i) && snd_interval_single(i))
|
if (!snd_interval_empty(i) && snd_interval_single(i)) {
|
||||||
return snd_pcm_hw_param_get_min(params, var, val, dir);
|
err = snd_pcm_hw_param_get_min(params, var, val, dir);
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set_near", var, *val, err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
if (err >= 0) {
|
if (err >= 0) {
|
||||||
snd_pcm_hw_params_t params1;
|
snd_pcm_hw_params_t params1;
|
||||||
|
|
@ -827,8 +875,10 @@ int snd_pcm_hw_param_set_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
} else {
|
} else {
|
||||||
*params = save;
|
*params = save;
|
||||||
err = snd_pcm_hw_param_set_max(pcm, params, SND_CHANGE, var, &max, &maxdir);
|
err = snd_pcm_hw_param_set_max(pcm, params, SND_CHANGE, var, &max, &maxdir);
|
||||||
if (err < 0)
|
if (err < 0) {
|
||||||
|
dump_hw_params(params, "set_near", var, *val, err);
|
||||||
return err;
|
return err;
|
||||||
|
}
|
||||||
last = 1;
|
last = 1;
|
||||||
}
|
}
|
||||||
_end:
|
_end:
|
||||||
|
|
@ -836,6 +886,8 @@ int snd_pcm_hw_param_set_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
||||||
err = snd_pcm_hw_param_set_last(pcm, params, var, val, dir);
|
err = snd_pcm_hw_param_set_last(pcm, params, var, val, dir);
|
||||||
else
|
else
|
||||||
err = snd_pcm_hw_param_set_first(pcm, params, var, val, dir);
|
err = snd_pcm_hw_param_set_first(pcm, params, var, val, dir);
|
||||||
|
if (err < 0)
|
||||||
|
dump_hw_params(params, "set_near", var, *val, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue