Add SND_CHMAP_NA and bit flag definitions

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2012-08-31 13:53:22 -07:00
parent 0f36270dd3
commit 48c2c90f19
3 changed files with 23 additions and 7 deletions

View file

@ -504,9 +504,14 @@ enum snd_pcm_chmap_position {
SND_CHMAP_FCH, /** front center high */ SND_CHMAP_FCH, /** front center high */
SND_CHMAP_FRH, /** front right high */ SND_CHMAP_FRH, /** front right high */
SND_CHMAP_TC, /** top center */ SND_CHMAP_TC, /** top center */
SND_CHMAP_LAST = SND_CHMAP_TC, /** last entry */ SND_CHMAP_NA, /** N/A, silent */
SND_CHMAP_LAST = SND_CHMAP_NA, /** last entry */
}; };
#define SND_CHMAP_POSITION_MASK 0xffff /** bitmask for channel position */
#define SND_CHMAP_PHASE_INVERSE (0x01 << 16) /* the channel is phase inverted */
#define SND_CHMAP_DRIVER_SPEC (0x02 << 16) /* non-standard channel value */
int **snd_pcm_query_chmaps(snd_pcm_t *pcm); int **snd_pcm_query_chmaps(snd_pcm_t *pcm);
void snd_pcm_free_chmaps(int **maps); void snd_pcm_free_chmaps(int **maps);
int *snd_pcm_get_chmap(snd_pcm_t *pcm); int *snd_pcm_get_chmap(snd_pcm_t *pcm);

View file

@ -479,7 +479,7 @@ enum {
/* channel positions */ /* channel positions */
enum { enum {
/* this follows the alsa-lib mixer channel value + 1*/ /* this follows the alsa-lib mixer channel value + 1 */
SNDRV_CHMAP_UNKNOWN = 0, SNDRV_CHMAP_UNKNOWN = 0,
SNDRV_CHMAP_FL, /* front left */ SNDRV_CHMAP_FL, /* front left */
SNDRV_CHMAP_FR, /* front right */ SNDRV_CHMAP_FR, /* front right */
@ -501,9 +501,14 @@ enum {
SNDRV_CHMAP_FCH, /* front center high */ SNDRV_CHMAP_FCH, /* front center high */
SNDRV_CHMAP_FRH, /* front right high */ SNDRV_CHMAP_FRH, /* front right high */
SNDRV_CHMAP_TC, /* top center */ SNDRV_CHMAP_TC, /* top center */
SNDRV_CHMAP_LAST = SNDRV_CHMAP_TC, SNDRV_CHMAP_NA, /* N/A, silent */
SNDRV_CHMAP_LAST = SNDRV_CHMAP_NA,
}; };
#define SNDRV_CHMAP_POSITION_MASK 0xffff
#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16)
#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)
enum { enum {
SNDRV_PCM_IOCTL_PVERSION = _IOR('A', 0x00, int), SNDRV_PCM_IOCTL_PVERSION = _IOR('A', 0x00, int),
SNDRV_PCM_IOCTL_INFO = _IOR('A', 0x01, struct sndrv_pcm_info), SNDRV_PCM_IOCTL_INFO = _IOR('A', 0x01, struct sndrv_pcm_info),

View file

@ -25,7 +25,8 @@ static const char * const chname[] = {
"Unknown", "Unknown",
"FL", "FR", "RL", "RR", "FC", "LFE", "SL", "SR", "RC", "FL", "FR", "RL", "RR", "FC", "LFE", "SL", "SR", "RC",
"FLC", "FRC", "RLC", "RRC", "FLW", "FRW", "FLH", "FLC", "FRC", "RLC", "RRC", "FLW", "FRW", "FLH",
"FCH", "FCH", "FRH", "TC" "FCH", "FCH", "FRH", "TC",
"N/A",
}; };
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
@ -36,10 +37,15 @@ static void print_channels(int channels, int *map)
printf(" "); printf(" ");
for (i = 0; i < channels; i++) { for (i = 0; i < channels; i++) {
unsigned int c = *map++; unsigned int c = *map++;
if (c >= ARRAY_SIZE(chname)) unsigned int pos = c & SND_CHMAP_POSITION_MASK;
printf(" Ch%d", c); if (c & SND_CHMAP_DRIVER_SPEC)
printf(" %d", p);
else if (p >= ARRAY_SIZE(chname))
printf(" Ch%d", p);
else else
printf(" %s", chname[c]); printf(" %s", chname[p]);
if (c & SND_CHMAP_PHASE_INVERSE)
printf("[INV]");
} }
printf("\n"); printf("\n");
} }