Date: Sat, 16 Dec 2017 14:33:49 +0100 From: Alexander Leidinger <Alexander@leidinger.net> To: blubee blubeeme <gurenchan@gmail.com> Cc: Hans Petter Selasky <hps@selasky.org>, freebsd-multimedia@freebsd.org Subject: Re: FreeBSD amd64 GENERIC kernel Message-ID: <20171216143349.Horde.VJOddyv79ydlAmvsvoTRhMP@webmail.leidinger.net> In-Reply-To: <CALM2mEm0WWqHx=67tPf9_ah1PAfUEirREpTiRmvEKxZ_YR7u-g@mail.gmail.com> References: <CALM2mEnnXKAyF_ti_zKYt=1m-ZTfjH5di1cayYjGM4hi9dOxRQ@mail.gmail.com> <aa346744-94c9-98a4-4de6-c5e956bf096c@ShaneWare.Biz> <CALM2mE=88_a-9FF3-e49TMPm1pGzwQn1h_wx2gofHK-NRKOpZA@mail.gmail.com> <cf0b39a9-8059-06c2-a033-109c626de225@selasky.org> <CALM2mEnfdv6R4YuSMSnR-SEtR1ief5uSg4qYWFb49dVQsRMw6A@mail.gmail.com> <ad2778be-a601-b825-1195-134dd02b04d9@selasky.org> <CALM2mEkKUr%2BrbMtS_ObXq0SYvZgFUKN9VXwqV-bxFrWVfizx1Q@mail.gmail.com> <4c3ae20e-b6dd-d5db-0b93-2e1225daa658@selasky.org> <CALM2mEkedLN%2Br2fk4YX3_Y01ENgvqo4s9yoyfBKTkBJkH56dcQ@mail.gmail.com> <4eb0c57e-96fa-b75a-17f8-750154aa247a@selasky.org> <CALM2mEn=9eNHzezpkKSBydKzedqagLwtfMopuDQb9Xem7=OGUA@mail.gmail.com> <d92eae76-831b-3a6f-a7a6-4f4d7e66df99@selasky.org> <CALM2mEmnxsdwy5rr9ApC3q7kZ2-EK2YYBqMAibd9nA3XRfhKhQ@mail.gmail.com> <20171216011614.Horde.Uitm74qhBEwh_NRo9RgDgu3@webmail.leidinger.net> <CALM2mEm0WWqHx=67tPf9_ah1PAfUEirREpTiRmvEKxZ_YR7u-g@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This message is in MIME format and has been PGP signed. --=_K580ClzmmfOP_x0pb-vaMYh Content-Type: text/plain; charset=utf-8; format=flowed; DelSp=Yes Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Quoting blubee blubeeme <gurenchan@gmail.com> (from Sat, 16 Dec 2017=20=20 09:39:04=20+0800): > On Sat, Dec 16, 2017 at 8:16 AM, Alexander Leidinger < > Alexander@leidinger.net> wrote: > >> Quoting blubee blubeeme <gurenchan@gmail.com> (from Fri, 15 Dec 2017 >> 22:39:25 +0800): >> >> What's with the stuck up attitude? Stay focused on the issue at hand whi= ch >>> is FreeBSD's fork of OSS makes it a challenge to implement software tha= t >>> sticks to the OSS standard. >>> >>> There's nobody actively working on improving the audio situation on >>> FreeBSD. You have a user/developer who wants to do the work and you rea= ct >>> >> >> Can you please describe in features / bullet-points what is missing >> instead of saying "X is better than Y"? >> >> like it's some personal attack on your person to update the underlying >>> code. >>> >>> Guess what, most of the clever features you talk about are in OSS4 and = if >>> they are not, they can still be added. >>> >> >> What I understand what you say is: >> - I want to replace X by Y, because Y is better. >> - Anything what is better in X can be added to Y. >> >> So basically I understand that you want to replace incomplete feature-se= t >> in X by an incomplete feature-set from Y (without knowing what the >> incompleteness in either X or Y is). > > There's no incomplete "feature" what I am saying is the changes made for > compatibility brought forward legacy application bugs. > When you update to clang 4 and a lot of your code breaks because they use > depreciated coding standards, do you patch clang or > do you fix your software? I consider this a bad example. The word "legacy" already implies that=20=20 you=20have a new way of doing things, wheres as comparing clang and gcc=20= =20 is=20not putting a new meaning to the input source code, but=20=20 transforming=20the source code based upon pre-defined rules. And yes, if=20= =20 there=20are cases where the source code which is compiled is wrong, and=20= =20 not=20clang. Regarding the issues you have with "compatibility aspects", I will=20=20 comment=20upon below. >> And to bring in some technical info (parts of "AFAIR", I may >> misremember...): >> - The OSS code in FreeBSD was at some point in time the 4Front OSS code= . >> - At some point 4Front closed-source their implementation and FreeBSD >> deviated. >> - At some point Ariff put in an effort to advance the OSS code in FreeB= SD >> which made it the best in various aspects (one of them latency) when >> compared to 4Front code, Windows, MacOS and Linux ALSA. >> - Then in 2006 Ryan was adding OSSv4-API compatibility to the FreeBSD >> sound code as part of the Google Summer of Code, mentored by Ariff and m= e. >> - Since then I don't remember big API changes/improvements... HPS worke= d >> a lot on USB audio support, userland drivers and AFAIK some MIDI stuff a= s >> part of the userland drivers, but all that is more or less drivers, not >> API... please correct me if I got this wrong; and mav(?) worked on HDA >> support (also driver, not API). >> > I posted a link below as a reference and some reasons why those changes > were not a good idea. > The whole point of ossv4 was to implement simpler API and depreciate lega= cy > audio application coding styles. And we have the OSSv4 (=3D simpler) API, as such we are not different=20=20 from=20an API point of view. >> Note, various aspects of the FreeBSD sound code can be tweaked by sysctl= s, >> e.g. latency, virtual channels, direct physical access ("bitperfect"), >> automatic resampling, equilizer, ... (see "sysctl hw.snd dev.pcm dev.hda= a >> dev.hdac" and "man sound snd_hda snd_uaudio" and the SOUND_4.TXT of Arif= f >> you mentioned). >> >> And regarding your comment about SOUND4.TXT: if you read this document >> carefully, you will notice that the part you quoted as being bad can be >> disabled. >> > It's not about being bad and can be disabled, if the API is still there > then people will copy old coding practices guaranteeing that newer audio > applications > are still plagued by the crud from legacy audio API. So you suggest we remove parts of your sound API? Which ioctls do you=20=20 want=20to remove? > So you leave that stuff there, with FreeBSD providing NO documentation/ > tutorials/ example programs of how to write decent sound applications. As we implement the OSSv4 API, why should we come up with a newly=20=20 written=20documentation of it? > A dev comes along and copies some code from an older application and brin= gs > forward all the legacy coding practices, but sure they use JACK audio, > it seems to run okay, now you try to port the application to FreeBSD, the > sound quality is bad or it's janky oh, FreeBSD sucks at audio. You think that people target FreeBSD with audio applications? I wish=20=20 this=20were true. Normally an application is written for Linux, and then=20= =20 someone=20tries to make it work on FreeBSD. It then all depends upon the=20= =20 skills=20of the person trying to make it work on FreeBSD, and on the=20=20 internal=20architecture of the program in question. No matter what kind=20= =20 of=20implementation of whatever API we use in FreeBSD, it doesn't matter=20= =20 as=20long as nobody targets FreeBSD in an audio application as (one of)=20= =20 the=20primary OS. > The whole point of implementing 4Front oss and not a FreeBSD for is to > K.I.S.S. > Here's why > 1)OSS v4 soundcard.h and code already hdandles ALL legacy applications w/= o > needing to implement special kernel kludges You are mixing API (soundcard.h) with implementation (FreeBSD kernel=20=20 sound=20code) and ways to change its behavior (sysctl). > 2)OSS v4 API docs explain how NOT to keep programming in the legacy style > that causes jank audio > The main way this was accomplished was by removing the exclusive acces= s > to the sound hardware, And we do that (several applications can access in parallel by default=20= =20 =3D no exclusive access). So what is not OK here? > this > > link: https://people.freebsd.org/~ariff/SOUND_4.TXT > > hw.snd.vpc_mixer_bypass (default=3D1, enabled) > > OSSv4 Compatibility: > Mostly, but we did it a 'better' way, like providing a special > bypass mode for legacy applications. > > This linuxism literally carried forward all the bugs from the past, 4Fron= t > oss handles this transparently, no need for these types of switches since > they'll allow devs to carry forward their bad programming habits. What this is about that we allow that old applications still work.=20=20 This=20is a part of the FreeBSD guarantee that old applications still=20=20 work=20on newer releases (ABI compatibility). The FreeBSD community=20=20 considers=20this as a benefit. For this specific case, what is the bug you see here? For a legacy=20=20 application=20it looks like it has exclusive access to the mixer, while=20= =20 it=20hasn't. For the application itself there is no bug here (it only=20=20 controls=20the mixer part of its own sound stream), and the user has the=20= =20 benefit=20of having multiple applications accessing the sound system. > If you update to the latest version of 4Front oss, this is handled, no ne= ed > to main the code behind this stuff. I fail to see the bug in FreeBSD here. So I see no benefit in=20=20 replacing=20this with 4Front oss. What did I miss? > ----- > > ----- > > dev.pcm.X.[play|rec].vchanmode (default=3Ddepends...) > 'fixed' or '0': > The good old mode. Channel mixing is done using fixed > format/rate. Digital passthrough or other advanced operat= ions > will not work in this mode (consider it as a 'legacy' mod= e). > For hardware channels that doesn't support digital=20=20 >=20formats, this > is the default mode. > > 'passthrough' or '1': > Channel mixing is done using fixed format/rate, but advan= ced > operations such as digital passthrough or 'Exclusive Acce= ss' > (#6 down below) will start working. All channels should > produce sound as usual until there is a request for a dig= ital > format playback, which in this case will 'mute'=20=20 >=20other channels > and let the latest incoming digital format pass through > undisturbed. Multiple / concurrent digital streams are > supported, but the LATEST stream will take precedence and > mute all other streams. > > 'adaptive' or '2': > Advanced mode. Works like much like'passthrough' mode, bu= t is > a bit smarter, especially for multiple pcm channels with > different format/rate. Whenever a new channel is=20=20 >=20about to start, > it will scan the entire list of virtual channels and > decide which > format/rate is the best (mostly, the higher/bigger).=20= =20 >=20This will > ensure that the quality of mixing depends on the best of = all > channels. The (bad) side effect of this mode is that the > hardware DMA needs to be restarted and might cause annoyi= ng > pops/clicks, but for a long running playback, this issue > might be acceptable. Any changes for current format/rate = can > be seen through the output of sysctl > dev.pcm.[play|rev].vchan[format|rate]. > > OSSv4 Compatibility: > 4front OSS incapable of doing this magic. > > There's nothing K.I.S.S. about this and again, all this "magic" is what's > making audio programming a mess. The default is what works for a lot of users, and doesn't contain any=20=20 magic=20at all. Only when you enable it on purpose you will get extended=20= =20 possibility.=20At least in 2009 when this document was last updated,=20=20 4Front=20did not provide those extended features. I don't know the state=20= =20 of=20this in current 4Front code. Feel free to explain if and how they=20= =20 handle=20it today (if they catched up to what FreeBSD is able to do, and=20= =20 how=20the handle it in the API). > ----- > > ----- > > 5) Bitperfect > > OSSv4 Compatibility: > SNDCTL_DSP_COOKEDMODE is mostly compatible, except that it=20=20 >=20will handle > complex situation with vchans enabled 'better' compared to=20=20 >=204front OSS. > > Again "better" compared to 4front oss, how so? That's off course a good question. My guess is, that this refers to=20=20 the=20extended features which are possible (see "adaptive" above). So=20=20 still,=20currently I fail to see what is less good in FreeBSD than in=20=20 4Front=20code. > ----- > > ----- > > 6) Exclusive Access > > OSSv4 Compatibility: > This feature is mostly compatible with OSSv4, except that 4front = OSS > prevents all other applications from running (stalled/halted, oth= er > unknown grave effects) if any sound device being accessed in a su= ch > way. FreeBSD does this smartly on top of the Transparent / Adapt= ive > Virtual Channel. > > This is the main issue and a cause for so many sound systems. If this isn= 't > removed and have those applications use legacy mode of the default 4Front > soundcard.h and follow better codinig practices into the future, no amoun= t > of sound architecture rewrite will help. You have not included the remark that this is not enabled by default.=20=20 This=20means that an user has to specially enable it to have exclusive=20= =20 access=20working. The outcome is that in case an application wants to=20=20 have=20exclusive access (e.g. by accident or programming error or legacy=20= =20 code),=20this is not respected and the user still gets sound output from=20= =20 multiple=20applications. > This bypass is what lead to ALSA, JACK v1-v2, and Pulse, which still don'= t > solve the problem of janky audio. This isn't a feature it's a bug. When you have multiple applications doing sound output, there is no=20=20 janky=20audio output. At least not to m knowledge. IF there is, then=20=20 please=20provide a way to reproduce this behavior. Additionally those audio systems - to my knowledge - have "multiple=20=20 audio=20streams at the same time" as a feature, which we don't need in=20= =20 FreeBSD=20because it just works by default. > audio/virtual_oss doesn't make up for that. virtual_oss is not meant as a competition to ALSA, Jack or PulseAudio.=20= =20 Think=20about it as a way to implement userland audio devices or virtual=20= =20 hardware. >=20----- > > You guys say I am claiming that X is better than Y, maybe you should read > the reference link that I shared above. > > 4Front oss already has a soundcard.h file that implements and support all > the legacy applications, they could've ripped that code out but left it > there for compatibility. > > Read the warnings about legacy audio applications and why ossv4 was > implemented the way it was: > http://manuals.opensound.com/developer/ossapi.html You are talking about the API here. The way a program is written to=20=20 access=20the sound system. When you complain about by telling we shall replace the sound code in=20=20 the=20kernel by the opensound code is not the API, it is the behavior=20=20 which=20is invoked when a program uses the API. Those are two different things. Maybe this is the cause of misunderstanding here. Bye, Alexander. --=20 http://www.Leidinger.net=20Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF http://www.FreeBSD.org netchild@FreeBSD.org : PGP 0x8F31830F9F2772BF --=_K580ClzmmfOP_x0pb-vaMYh Content-Type: application/pgp-signature Content-Description: Digitale PGP-Signatur Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJaNSC9AAoJEKrxQhqFIICEfI0QAJoGau2MjRWrHQJFto3oSygO E4YsVSwGWeG8gbUtRbswqBmK5XJoDPLOTOedMNXBYETD0VVC0+ECJxNqjsokIsvA vBzzYbgbV5Y9xmW6Y6/ahaMngcaPKjjvQsLjvrHHRKnnxMB+nqIaOvTsf1u5xDwT XGtAnV97h3GWqPQijK3F0e25q/JV1C5tadAvE10IuWx5KMPWrw2az9xvpHWKUdqC KaO6gDjWvQmK1aXnDmxQeYH6tAZBOPHxHoDsI2i1rrNqTT/AFwJoDCDT1ZAFGGAw xq3CElHouS1zub6vA5R8z8tG2y6HaAv28tk3TkMXQBPi3uFB0zkwTzsfNXdTLlL4 78ZdLwyP+7FNXDTEbo2ssqIwprpMDHMZkqzO5hbfs11W6CO17VqYPYHDL3r5ztGr ii2R7PbUooTvIm59Y43sQEMdar6r5a2dmbM/zvHaFUOGmoOR83iZNjSAf0Li1RyB 03wHt+Vm5tsfWS8HaTl7lb/UQuTQZbdKhRZGZ7NIp4ohkcOc3MjtpxebHqonaEi7 DZvVxDFqjhjpMb3DxzFPBGO/cud8wVtwT/Hfxmm71t3EHjnZtVs/rKOAPVYelAh1 cWiNp3aBOHXR7duVlO3qzbpZVKI4/n9krwt55FXLnxbet5rrbUTbwjDiolf+0Sjt iSsWPHSB+49sXgQLDV9b =tp19 -----END PGP SIGNATURE----- --=_K580ClzmmfOP_x0pb-vaMYh--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171216143349.Horde.VJOddyv79ydlAmvsvoTRhMP>