linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ruslan Bilovol <ruslan.bilovol@gmail.com>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: Felipe Balbi <balbi@kernel.org>, Daniel Mack <zonque@gmail.com>,
	Jassi Brar <jassisinghbrar@gmail.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH 0/5] USB Audio Gadget refactoring
Date: Tue, 26 Jul 2016 04:31:09 +0300	[thread overview]
Message-ID: <CAB=otbSAWpo0n4rW34C7qvKW6J7BJK6pdqCVJU_AHi0u3hqe-A@mail.gmail.com> (raw)
In-Reply-To: <c737fdff-9312-add2-00bb-a8fcbcbde365@ladisch.de>

On Fri, Jul 15, 2016 at 10:43 AM, Clemens Ladisch <clemens@ladisch.de> wrote:
>>> On Tue, May 24, 2016 at 2:50 AM, Ruslan Bilovol
>>> <ruslan.bilovol@gmail.com> wrote:
>>>> it may break current usecase for some people
>
> And what are the benefits that justify breaking the kernel API?


Main limitation with current f_uac1 design is - it can be used only on systems
with real ALSA card present and can have only exact number of
channels / sampling rate as sink card has.
Yet it is not flexible - can't do audio processing between f_uac1 and the card.
Also if someone wants to bind f_uac1 it to another sound card he has to
unload g_audio or reconfigure it through configfs - that means USB
reenumeration on host device.

If you have a "virtual sound card", audio processing is done in userspace
and is more flexible. You even don't need to have a real sound card and
can use some userspace application for playing/capturing audio samples.
Moreover, existing f_uac2 (that is USB Audio Class 2.0 function
implementation) already uses approach of "virtual sound card"

A real cases when it's required to have UAC1 gadget represented as virtual
sound card on gadget side:
 - android accessory f_audio_source.c implementation, android plays audio
   directly to UAC1 "virtual sound card"
 - some 3G/LTE voice USB sticks with Linux as firmware have user-space
   application inside that receives audio from network and need to source/sink
   it to some sound card (UAC1)
 - USB sound card with complex audio processing inside, made on small
   Linux-powered device ("sound-studio")

What's annoying is we have two quite similar USB Audio Classes
implementations(f_uac1 and f_uac2) that have opposite audio
representations: first transfers audio samples directly to real ALSA card,
second exposes virtual ALSA card. That means you have to implement
similar things (capture/playback, etc) in different way. With new design
both implementations provide same "API" (virtual sound card), allowing
us to reuse a lot of code and implement new features much easier (look
at adding of capture support to f_uac1 in PATCH 5/5 - that was very simple
and consists almost from adding new USB descriptors and reusing existing
code from newly created u_audio.c)

Also new USB Audio Gadget design follows existing approach for
another USB Classes:
 - serial gadgets use u_serial and expose virtual TTY port
 - networking gadgets use u_ether and expose virtual network interface
 - uvc gadget exposes virtual v4l device
 - midi gadget exposes virtual sound card
 - etc, etc

Of course disadvantage of new approach for UAC1 gadget is you need to
use some userspace application for routing audio from virtual to real
sound card, like in case of UAC2 gadget. But thanks to existing
applications like alsaloop it's not difficult nowadays.

The answer I want to get in this RFC - can we drop current f_uac1 approach,
simplify USB Audio Gadget by reusing common code.
Or "we do not break userspace" (or API) and have to live with it forever.

Best regards,
Ruslan

  reply	other threads:[~2016-07-26  1:31 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-23 23:50 [RFC PATCH 0/5] USB Audio Gadget refactoring Ruslan Bilovol
2016-05-23 23:50 ` [RFC PATCH 1/5] usb: gadget: f_uac2: remove platform driver/device creation Ruslan Bilovol
2016-05-23 23:50 ` [RFC PATCH 2/5] usb: gadget: f_uac2: split out audio core Ruslan Bilovol
2016-05-23 23:50 ` [RFC PATCH 3/5] usb: gadget: f_uac1: drop volume/mute functionality Ruslan Bilovol
2016-05-23 23:50 ` [RFC PATCH 4/5] usb: gadget: f_uac1: switch to u_audio core utilities Ruslan Bilovol
2016-05-23 23:50 ` [RFC PATCH 5/5] usb: gadget: f_uac1: add capture support Ruslan Bilovol
2016-06-08  8:03 ` [RFC PATCH 0/5] USB Audio Gadget refactoring Ruslan Bilovol
2016-07-14 21:38   ` Ruslan Bilovol
2016-07-15  7:43     ` Clemens Ladisch
2016-07-26  1:31       ` Ruslan Bilovol [this message]
2016-07-26  8:06         ` Clemens Ladisch
2016-07-26 21:22           ` Ruslan Bilovol
2016-07-26  8:53         ` Jassi Brar
2016-07-26 12:02           ` Krzysztof Opasiak
2016-07-26 21:55             ` Ruslan Bilovol
2016-07-26 21:38           ` Ruslan Bilovol

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-all 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='CAB=otbSAWpo0n4rW34C7qvKW6J7BJK6pdqCVJU_AHi0u3hqe-A@mail.gmail.com' \
    --to=ruslan.bilovol@gmail.com \
    --cc=balbi@kernel.org \
    --cc=clemens@ladisch.de \
    --cc=jassisinghbrar@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=zonque@gmail.com \
    /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;
as well as URLs for NNTP newsgroup(s).