pcm: route: Don't handle no matching chmap as a serious error
diff mbox

Message ID 1395152876-28480-1-git-send-email-tiwai@suse.de
State Accepted
Headers show

Commit Message

Takashi Iwai March 18, 2014, 2:27 p.m. UTC
When find_matching_chmap() returns an error for the non-matching
chmap, the caller, snd_pcm_route_open(), also returns an error
although it shouldn't be handled as the fatal error.  This results in
the probe error with PulseAudio and it gives no real output in the
end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 src/pcm/pcm_route.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Comments

David Henningsson March 18, 2014, 4:19 p.m. UTC | #1
On 03/18/2014 03:27 PM, Takashi Iwai wrote:
> When find_matching_chmap() returns an error for the non-matching
> chmap, the caller, snd_pcm_route_open(), also returns an error
> although it shouldn't be handled as the fatal error.  This results in
> the probe error with PulseAudio and it gives no real output in the
> end.

Hmm, could you give a more specific example? In case the driver does not
support channel maps at all, that case is handled in the beginning of
the function.

So this only happens if the driver supports channel maps, but only
non-compatible with the requested map. In which case I believe it's
correct that the probing should fail...?

> 
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>  src/pcm/pcm_route.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c
> index ab17fa78be2c..ac11bdc8adfd 100644
> --- a/src/pcm/pcm_route.c
> +++ b/src/pcm/pcm_route.c
> @@ -940,10 +940,8 @@ static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap,
>  
>  	snd_pcm_free_chmaps(chmaps);
>  
> -	if (*found_chmap == NULL) {
> +	if (*found_chmap == NULL)
>  		SNDERR("Found no matching channel map");
> -		return -EINVAL;
> -	}
>  	return 0;
>  }
>  
>
Takashi Iwai March 18, 2014, 4:34 p.m. UTC | #2
At Tue, 18 Mar 2014 17:19:29 +0100,
David Henningsson wrote:
> 
> On 03/18/2014 03:27 PM, Takashi Iwai wrote:
> > When find_matching_chmap() returns an error for the non-matching
> > chmap, the caller, snd_pcm_route_open(), also returns an error
> > although it shouldn't be handled as the fatal error.  This results in
> > the probe error with PulseAudio and it gives no real output in the
> > end.
> 
> Hmm, could you give a more specific example? In case the driver does not
> support channel maps at all, that case is handled in the beginning of
> the function.

Well, the problem is that PulseAudio doesn't work at all with the
current alsa-lib git prior to the commit in some cases.  That is, the
commit brought some incompatibility.

> So this only happens if the driver supports channel maps, but only
> non-compatible with the requested map. In which case I believe it's
> correct that the probing should fail...?

Could you check whether PA 5.0 works as is with alsa-lib git (before
the last fix)?  It could be seen on some desktop machines.


Takashi

> 
> > 
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> > ---
> >  src/pcm/pcm_route.c | 4 +---
> >  1 file changed, 1 insertion(+), 3 deletions(-)
> > 
> > diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c
> > index ab17fa78be2c..ac11bdc8adfd 100644
> > --- a/src/pcm/pcm_route.c
> > +++ b/src/pcm/pcm_route.c
> > @@ -940,10 +940,8 @@ static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap,
> >  
> >  	snd_pcm_free_chmaps(chmaps);
> >  
> > -	if (*found_chmap == NULL) {
> > +	if (*found_chmap == NULL)
> >  		SNDERR("Found no matching channel map");
> > -		return -EINVAL;
> > -	}
> >  	return 0;
> >  }
> >  
> > 
> 
> 
> 
> -- 
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
>

Patch
diff mbox

diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c
index ab17fa78be2c..ac11bdc8adfd 100644
--- a/src/pcm/pcm_route.c
+++ b/src/pcm/pcm_route.c
@@ -940,10 +940,8 @@  static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap,
 
 	snd_pcm_free_chmaps(chmaps);
 
-	if (*found_chmap == NULL) {
+	if (*found_chmap == NULL)
 		SNDERR("Found no matching channel map");
-		return -EINVAL;
-	}
 	return 0;
 }