<p dir="ltr"><br>
On 26 Sep 2014 15:45, "Pali Rohár" <<a href="mailto:pali.rohar@gmail.com">pali.rohar@gmail.com</a>> wrote:<br>
><br>
> On Friday 26 September 2014 11:39:50 Arun Raghavan wrote:<br>
> > On 26 September 2014 14:59, Pali Rohár <<a href="mailto:pali.rohar@gmail.com">pali.rohar@gmail.com</a>><br>
> wrote:<br>
> > > On Friday 26 September 2014 11:00:39 Arun Raghavan wrote:<br>
> > >> On 26 Sep 2014 14:19, "Pali Rohár" <<a href="mailto:pali.rohar@gmail.com">pali.rohar@gmail.com</a>><br>
> > ><br>
> > > wrote:<br>
> > >> > On Friday 26 September 2014 06:55:38 Arun Raghavan wrote:<br>
> > >> > > On 26 September 2014 03:06, Pali Rohár<br>
> > >> > > <<a href="mailto:pali.rohar@gmail.com">pali.rohar@gmail.com</a>><br>
> > >> ><br>
> > >> > wrote:<br>
> > >> > > > On Wednesday 24 September 2014 19:08:55 Pali Rohár<br>
> wrote:<br>
> > >> > > >> With this patch module-bluetooth-policy<br>
> > >> > > >> automatically switch from a2dp profile to hsp<br>
> > >> > > >> profile if some application want to start<br>
> > >> > > >> recording.<br>
> > >> > > >><br>
> > >> > > >> By default a2dp profile is used for listening music,<br>
> > >> > > >> but for VOIP calls is needed profile with microphone<br>
> > >> > > >> support (hsp). So this patch will switch to hsp<br>
> > >> > > >> profile if some application want to use microphone<br>
> > >> > > >> and after it release it profile is switched back to<br>
> > >> > > >> a2dp. So this patch allows to use bluetooth<br>
> > >> > > >> microphone automatically without need of user<br>
> > >> > > >> interaction.<br>
> > >> > > >><br>
> > >> > > >> Signed-off-by: Pali Rohár <<a href="mailto:pali.rohar@gmail.com">pali.rohar@gmail.com</a>><br>
> > >> > > >> ---<br>
> > >> > > ><br>
> > >> > > > And with this patch a2dp profile could be preferred<br>
> > >> > > > and has higher priority then hsp. Because a2dp has<br>
> > >> > > > better audio quality and when recording is needed my<br>
> > >> > > > patch for module-bluetooth-policy will switch to<br>
> > >> > > > hsp. What do you think about it?<br>
> > >> > ><br>
> > >> > > I'm not in favour of an exception-list-based approach<br>
> > >> > > (too much of a moving target). I'd written something<br>
> > >> > > similar in the past based on the media role. I'd<br>
> > >> > > prefer something like this since it allows us to take<br>
> > >> > > action based on what the stream is meant to be doing,<br>
> > >> > > rather than having a blanket policy that may or may<br>
> > >> > > not make sense.<br>
> > >> > ><br>
> > >> > > <a href="http://cgit.freedesktop.org/~arun/pulseaudio/tree/src/m">http://cgit.freedesktop.org/~arun/pulseaudio/tree/src/m</a><br>
> > >> > > odu les/ module-profile-switcher.c?h=bluetooth<br>
> > >> > ><br>
> > >> > > The intention when we last discussed on the list wast<br>
> > >> > > to integrate this into module-bluetooth-policy (the<br>
> > >> > > patch predates merge of m-b-p).<br>
> > >> > ><br>
> > >> > > -- Arun<br>
> > >> ><br>
> > >> > This approach depends on that output stream set by<br>
> > >> > application will have correct PA_PROP_MEDIA_ROLE. So<br>
> > >> > basically will not work with any existing application. So<br>
> > >> > this is useless for me and for other people too.<br>
> > >><br>
> > >> Why not fix said applications? Exposing this metadata<br>
> > >> correctly allows several things, such a automatic routing,<br>
> > >> echo cancellation/noise suppression, AGC.<br>
> > >><br>
> > >> The fix can be made via code or starting the app with an<br>
> > >> environment variable set.<br>
> > >><br>
> > >> -- Arun<br>
> > ><br>
> > > Backward compatibility. There still will be non trivial set<br>
> > > of applications without PA_PROP_MEDIA_ROLE. Plus there are<br>
> > > more closed source applications which you cannot modify.<br>
> > > And starting application with some special ENV does not<br>
> > > change anything. Still<br>
> ><br>
> > Does not change anything? You can set a property on all<br>
> > streams created by an app using the environment variable.<br>
> ><br>
><br>
> There are applications which using x sessions (e.g all KDE<br>
> applications). And env variables are not stored.<br>
><br>
> So solution with env is working only after first application<br>
> start (not after logout-login).</p>
<p dir="ltr">You would set the environment variable in the desktop file, so normal launch would use it.</p>
<p dir="ltr">Note that this is only the approach to take if modifying the app is a complete non option.</p>
<p dir="ltr">> Also what is easier? Open xterm, set new env, start application?<br>
> Or start application clicking on icon and clicking on icon<br>
> "switch from a2dp to hsp"? For normal users it is second option.<br>
> Maybe for power user first option.<br>
><br>
> So your solution with env is in my opinion only for power users.<br>
> All other users who will not know about new special ENV will be<br>
> again forced to use manual switch -- so your solution really does<br>
> not change anything.<br>
><br>
> > > is needed user interaction and it is easier to switch a2dp<br>
> > > profile to hsp as opening xterm, setting ENV and then<br>
> > > starting application. Plus applications with using<br>
> > > pulse-alsa wrapper will never set that PA_PROP_MEDIA_ROLE.<br>
> ><br>
> > The solution above applies to the ALSA pulse plugin<br>
> > applications too.<br>
> ><br>
><br>
> > > So I think exception list is only possible solution without<br>
> > > modifying existing applications.<br>
> > ><br>
> > > Or do you want to modify *ALL* existing applications which<br>
> > > exists?<br>
> ><br>
> > All VoIP applications, yes.<br>
> ><br>
><br>
> Ok, starts with skype as this is application is most popular (in<br>
> my opinion) :-)</p>
<p dir="ltr">Skype already sets this. Has been doing so for years.</p>
<p dir="ltr">> Also there are applications which using only alsa pulse wrapper.<br>
> And these applications needs full rewrite.</p>
<p dir="ltr">This would be a case to consider the env option I mentioned, either via setenv() or desktop file. We are not talking about a massive number of applications here.</p>
<p dir="ltr">> > As I mentioned before, there is good reason for applications<br>
> > to provide metadata for the types of streams they are<br>
> > creating, and I'd rather have a proper solution in place than<br>
> > an overreaching heuristic.<br>
> ><br>
> > -- Arun<br>
><br>
> Yes, there is good reason for it -- I understand. But pulseaudio<br>
> does not force applications to provide these data and also there<br>
> are lot of applications which do not provide these data.<br>
><br>
> And I still think that inventing something which will be broken<br>
> (by design!!!) by older versions of applications is not good<br>
> idea.</p>
<p dir="ltr">This is a solution we've had for a while and a number of applications use it already.</p>
<p dir="ltr">> I think that my solution with blacklist is better. It can be<br>
> easily extended by one condition for *new* applications which<br>
> sets PA_PROP_MEDIA_ROLE.<br>
><br>
> And if you fix all existing pulseaudio applications then my auto<br>
> switch code just do nothing, so it does not break new code for<br>
> PA_PROP_MEDIA_ROLE.<br>
><br>
> And if some older application connects to pulseaudio (without<br>
> PA_PROP_MEDIA_ROLE) then you will have set correct bluetooth<br>
> profile.</p>
<p dir="ltr">I still disagree with your solution. Applications can and should be providing stream type metadata and we should be implementing policy based on that.</p>
<p dir="ltr">-- Arun</p>