diff options
Diffstat (limited to 'src/pcm/pcm_hw.c')
-rw-r--r-- | src/pcm/pcm_hw.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c index 65b198c5..59a24200 100644 --- a/src/pcm/pcm_hw.c +++ b/src/pcm/pcm_hw.c @@ -1018,7 +1018,7 @@ static int map_status_and_control_data(snd_pcm_t *pcm, bool force_fallback) snd_pcm_set_appl_ptr(pcm, &hw->mmap_control->appl_ptr, hw->fd, SNDRV_PCM_MMAP_OFFSET_CONTROL); if (hw->mmap_control_fallbacked) { - unsigned int flags; + unsigned int flags = 0; /* read appl_ptr and avail_min from kernel when device opened * with SND_PCM_APPEND flag */ @@ -1199,6 +1199,7 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev, snd_ctl_t *ctl; snd_ctl_elem_id_t id = {0}; unsigned int tlv[2048], *start; + unsigned int type; snd_pcm_chmap_query_t **map; int i, ret, nums; @@ -1223,9 +1224,10 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev, /* FIXME: the parser below assumes that the TLV only contains * chmap-related blocks */ - if (tlv[0] != SND_CTL_TLVT_CONTAINER) { - if (!is_chmap_type(tlv[0])) { - SYSMSG("Invalid TLV type %d\n", tlv[0]); + type = tlv[SNDRV_CTL_TLVO_TYPE]; + if (type != SND_CTL_TLVT_CONTAINER) { + if (!is_chmap_type(type)) { + SYSMSG("Invalid TLV type %d\n", type); return NULL; } start = tlv; @@ -1234,7 +1236,7 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev, unsigned int *p; int size; start = tlv + 2; - size = tlv[1]; + size = tlv[SNDRV_CTL_TLVO_LEN]; nums = 0; for (p = start; size > 0; ) { if (!is_chmap_type(p[0])) { |