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"
|
||||
|
||||
#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)
|
||||
{
|
||||
#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:
|
||||
if (mode == SND_TRY)
|
||||
*params = save;
|
||||
if (err < 0)
|
||||
dump_hw_params(params, "set_min", var, *val, 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:
|
||||
if (mode == SND_TRY)
|
||||
*params = save;
|
||||
if (err < 0)
|
||||
dump_hw_params(params, "set_max", var, *val, 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:
|
||||
if (mode == SND_TRY)
|
||||
*params = save;
|
||||
if (err < 0)
|
||||
dump_hw_params(params, "set_minmax", var, *min, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -713,6 +755,8 @@ int snd_pcm_hw_param_set(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
|
|||
_fail:
|
||||
if (mode == SND_TRY)
|
||||
*params = save;
|
||||
if (err < 0)
|
||||
dump_hw_params(params, "set", var, val, 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);
|
||||
|
||||
i = hw_param_interval(params, var);
|
||||
if (!snd_interval_empty(i) && snd_interval_single(i))
|
||||
return snd_pcm_hw_param_get_min(params, var, val, dir);
|
||||
if (!snd_interval_empty(i) && snd_interval_single(i)) {
|
||||
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) {
|
||||
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 {
|
||||
*params = save;
|
||||
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;
|
||||
}
|
||||
last = 1;
|
||||
}
|
||||
_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);
|
||||
else
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue