public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Andrew Fish" <afish@apple.com>
To: edk2-devel-groups-io <devel@edk2.groups.io>, mcb30@ipxe.org
Cc: Ethin Probst <harlydavidsen@gmail.com>,
	Mike Kinney <michael.d.kinney@intel.com>,
	Leif Lindholm <leif@nuviainc.com>,
	Laszlo Ersek <lersek@redhat.com>,
	"Desimone, Nathaniel L" <nathaniel.l.desimone@intel.com>,
	Rafael Rodrigues Machado <rafaelrodrigues.machado@gmail.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [edk2-devel] VirtIO Sound Driver (GSoC 2021)
Date: Thu, 15 Apr 2021 22:13:57 -0700	[thread overview]
Message-ID: <6F69BEA6-5B7A-42E5-B6DA-D819ECC85EE5@apple.com> (raw)
In-Reply-To: <33e37977-2d27-36a0-89a6-36e513d06b2f@ipxe.org>



> On Apr 15, 2021, at 5:59 PM, Michael Brown <mcb30@ipxe.org> wrote:
> 
> On 16/04/2021 00:42, Ethin Probst wrote:
>> Forcing a particular channel mapping, sample rate and sample format on
>> everyone would complicate application code. From an application point
>> of view, one would, with that type of protocol, need to do the
>> following:
>> 1) Load an audio file in any audio file format from any storage mechanism.
>> 2) Decode the audio file format to extract the samples and audio metadata.
>> 3) Resample the (now decoded) audio samples and convert (quantize) the
>> audio samples into signed 16-bit PCM audio.
>> 4) forward the samples onto the EFI audio protocol.
> 
> You have made an incorrect assumption that there exists a requirement to be able to play audio files in arbitrary formats.  This requirement does not exist.
> 
> With a protocol-mandated fixed baseline set of audio parameters (sample rate etc), what would happen in practice is that the audio files would be encoded in that format at *build* time, using tools entirely external to UEFI.  The application code is then trivially simple: it just does "load blob, pass blob to audio protocol".
> 


Ethin,

Given the goal is an industry standard we value interoperability more that flexibility. 

How about another use case. Lets say the Linux OS loader (Grub) wants to have an accessible UI so it decides to sore sound files on the EFI System Partition and use our new fancy UEFI Audio Protocol to add audio to the OS loader GUI. So that version of Grub needs to work on 1,000 of different PCs and a wide range of UEFI Audio driver implementations. It is a much easier world if Wave PCM 16 bit just works every place. You could add a lot of complexity and try to encode the audio on the fly, maybe even in Linux proper but that falls down if you are booting from read only media like a DVD or backup tape (yes people still do that in server land). 

The other problem with flexibility is you just made the test matrix very large for every driver that needs to get implemented. For something as complex as Intel HDA how you hook up the hardware and what CODECs you use may impact the quality of the playback for a given board. Your EFI is likely going to pick a single encoding at that will get tested all the time if your system has audio, but all 50 other things you support not so much. So that will required testing, and some one with audiophile ears (or an AI program) to test all the combinations. I’m not kidding I get BZs on the quality of the boot bong on our systems. 


>> typedef struct EFI_SIMPLE_AUDIO_PROTOCOL {
>>   EFI_SIMPLE_AUDIO_PROTOCOL_RESET Reset;
>>   EFI_SIMPLE_AUDIO_PROTOCOL_START Start;
>>   EFI_SIMPLE_AUDIO_PROTOCOL_STOP Stop;
>> } EFI_SIMPLE_AUDIO_PROTOCOL;
> 
> This is now starting to look like something that belongs in boot-time firmware.  :)
> 

I think that got a little too simple I’d go back and look at the example I posted to the thread but add an API to load the buffer, and then play the buffer (that way we can an API in the future to twiddle knobs). That API also implements the async EFI interface. Trust me the 1st thing that is going to happen when we add audio is some one is going to complain in xyz state we should mute audio, or we should honer audio volume and mute settings from setup, or from values set in the OS. Or some one is going to want the volume keys on the keyboard to work in EFI. 

Also if you need to pick apart the Wave PCM 16 byte file to feed it into the audio hardware that probably means we should have a library that does that work, so other Audio drivers can share that code. Also having a library makes it easier to write a unit test. We need to be security conscious as we need to treat the Audo file as attacker controlled data. 

Thanks,

Andrew Fish

> Michael
> 
> 
> 
> 
> 


  reply	other threads:[~2021-04-16  5:13 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-29 20:28 VirtIO Sound Driver (GSoC 2021) Ethin Probst
2021-03-30  3:17 ` [edk2-devel] " Nate DeSimone
2021-03-30 14:41   ` Ethin Probst
2021-03-31  6:34     ` Nate DeSimone
2021-03-30 21:50 ` Rafael Machado
2021-03-30 22:12   ` Ethin Probst
     [not found]   ` <16713E6D64EE917D.25648@groups.io>
2021-03-31  0:01     ` Ethin Probst
2021-03-31  5:02       ` Andrew Fish
2021-03-31  6:41         ` Nate DeSimone
2021-04-01  5:05           ` Ethin Probst
2021-04-05  4:42             ` Andrew Fish
2021-04-05  4:43               ` Ethin Probst
2021-04-05  5:10                 ` Andrew Fish
2021-04-06 14:16           ` Laszlo Ersek
2021-04-06 15:17             ` Ethin Probst
2021-04-13 12:28               ` Leif Lindholm
2021-04-13 14:16                 ` Andrew Fish
2021-04-13 16:53                   ` Ethin Probst
2021-04-13 21:38                     ` Andrew Fish
2021-04-13 23:47                       ` Ethin Probst
     [not found]                       ` <16758FB6436B1195.32393@groups.io>
2021-04-14  1:20                         ` Ethin Probst
2021-04-14  3:52                           ` Andrew Fish
2021-04-14 20:47                             ` Ethin Probst
2021-04-14 22:30                               ` Michael D Kinney
2021-04-14 23:54                                 ` Andrew Fish
2021-04-15  4:01                                   ` Ethin Probst
2021-04-15  4:58                                     ` Andrew Fish
2021-04-15  5:28                                       ` Ethin Probst
2021-04-15 12:07                                         ` Michael Brown
2021-04-15 16:42                                           ` Andrew Fish
2021-04-15 20:11                                             ` Ethin Probst
2021-04-15 22:35                                               ` Andrew Fish
2021-04-15 23:42                                                 ` Ethin Probst
2021-04-16  0:59                                                   ` Michael Brown
2021-04-16  5:13                                                     ` Andrew Fish [this message]
2021-04-16  5:33                                                       ` Ethin Probst
2021-04-16 11:34                                                         ` Leif Lindholm
2021-04-16 17:03                                                           ` Andrew Fish
2021-04-16 17:45                                                             ` Ethin Probst
2021-04-16 17:55                                                               ` Ethin Probst
2021-04-16 18:09                                                                 ` Andrew Fish
2021-04-16 23:50                                                                   ` Ethin Probst
2021-04-16 18:02                                                               ` Andrew Fish
2021-04-17 16:51                                                               ` Marvin Häuser
2021-04-17 17:31                                                                 ` Andrew Fish
2021-04-17 18:04                                                                   ` Marvin Häuser
2021-04-18  8:55                                                                     ` Ethin Probst
2021-04-18 15:22                                                                       ` Andrew Fish
2021-04-18 19:11                                                                         ` Marvin Häuser
2021-04-18 19:22                                                                           ` Marvin Häuser
2021-04-18 21:00                                                                             ` Andrew Fish
2021-04-16 13:22                                                   ` Marvin Häuser
2021-04-16 14:34                                                     ` Andrew Fish
2021-04-16 15:03                                                       ` Marvin Häuser
     [not found]                                                 ` <16762C957671127A.12361@groups.io>
2021-04-16  0:59                                                   ` Ethin Probst
2021-04-16  1:03                                                     ` Michael Brown
2021-04-16  2:06                                                       ` Ethin Probst
2021-04-16  3:48                                                       ` Andrew Fish
2021-04-16  4:29                                                         ` Ethin Probst
2021-04-15  9:51                                     ` Laszlo Ersek
2021-04-15 16:01                                       ` Andrew Fish
2021-04-04 22:05 ` Marvin Häuser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6F69BEA6-5B7A-42E5-B6DA-D819ECC85EE5@apple.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox