Message ID | 76a0c0fda2f78cfb5f2234aa7e28073aa3e8bd95.1566755452.git.DirtY.iCE.hu@gmail.com |
---|---|
State | New |
Headers | show |
Series | Audio: Mixeng-free 5.1/7.1 audio support | expand |
On 8/25/19 1:46 PM, Kővágó, Zoltán wrote: > This will allow us to disable mixeng when we use a decent backend. > > Disabling mixeng have a few advantages: > * we no longer convert the audio output from one format to another, when > the underlying audio system would just convert it to a third format. > We no longer convert, only the underlying system, when needed. > * the underlying system probably has better resampling and sample format > converting methods anyway... > * we may support formats that the mixeng currently does not support (S24 > or float samples, more than two channels) > * when using an audio server (like pulseaudio) different sound card > outputs will show up as separate streams, even if we use only one > backend > > Disadvantages: > * audio capturing no longer works (wavcapture, and vnc audio extension) > * some backends only support a single playback stream or very picky > about the audio format. In this case we can't disable mixeng. > > However mixeng is not removed, only made optional, so this shouldn't be > a big concern. > > Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> > --- > qapi/audio.json | 5 +++++ > qemu-options.hx | 6 ++++++ > 2 files changed, 11 insertions(+) > > diff --git a/qapi/audio.json b/qapi/audio.json > index 9fefdf5186..dc7f9cb1e2 100644 > --- a/qapi/audio.json > +++ b/qapi/audio.json > @@ -11,6 +11,10 @@ > # General audio backend options that are used for both playback and > # recording. > # > +# @mixeng: use QEMU's mixing engine to mix all streams inside QEMU. When set to > +# off, fixed-settings must be also off. Not every backend compatible > +# with the off setting (default on, since 4.2) > +# 'mixeng' looks like an accidental typo, when 3 words later is 'mixing'. Would 'mix-eng' or 'mix-engine' be more obvious? > ## > { 'struct': 'AudiodevPerDirectionOptions', > 'data': { > + '*mixeng': 'bool', > '*fixed-settings': 'bool', And the very next member is an example that QAPI doesn't have to use abbreviations.
On 2019-08-26 15:35, Eric Blake wrote: > On 8/25/19 1:46 PM, Kővágó, Zoltán wrote: >> This will allow us to disable mixeng when we use a decent backend. >> >> Disabling mixeng have a few advantages: >> * we no longer convert the audio output from one format to another, when >> the underlying audio system would just convert it to a third format. >> We no longer convert, only the underlying system, when needed. >> * the underlying system probably has better resampling and sample format >> converting methods anyway... >> * we may support formats that the mixeng currently does not support (S24 >> or float samples, more than two channels) >> * when using an audio server (like pulseaudio) different sound card >> outputs will show up as separate streams, even if we use only one >> backend >> >> Disadvantages: >> * audio capturing no longer works (wavcapture, and vnc audio extension) >> * some backends only support a single playback stream or very picky >> about the audio format. In this case we can't disable mixeng. >> >> However mixeng is not removed, only made optional, so this shouldn't be >> a big concern. >> >> Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> >> --- >> qapi/audio.json | 5 +++++ >> qemu-options.hx | 6 ++++++ >> 2 files changed, 11 insertions(+) >> >> diff --git a/qapi/audio.json b/qapi/audio.json >> index 9fefdf5186..dc7f9cb1e2 100644 >> --- a/qapi/audio.json >> +++ b/qapi/audio.json >> @@ -11,6 +11,10 @@ >> # General audio backend options that are used for both playback and >> # recording. >> # >> +# @mixeng: use QEMU's mixing engine to mix all streams inside QEMU. When set to >> +# off, fixed-settings must be also off. Not every backend compatible >> +# with the off setting (default on, since 4.2) >> +# > > 'mixeng' looks like an accidental typo, when 3 words later is 'mixing'. > Would 'mix-eng' or 'mix-engine' be more obvious? I used the spelling used in audio/mixeng.c, if we treat it as a name then it should be simply 'mixeng'. However I agree that it might not be too meaningful for users, so 'mixing-engine' would make more sense, even though it's a bit longer. > > >> ## >> { 'struct': 'AudiodevPerDirectionOptions', >> 'data': { >> + '*mixeng': 'bool', >> '*fixed-settings': 'bool', > > And the very next member is an example that QAPI doesn't have to use > abbreviations. > Regards, Zoltan
diff --git a/qapi/audio.json b/qapi/audio.json index 9fefdf5186..dc7f9cb1e2 100644 --- a/qapi/audio.json +++ b/qapi/audio.json @@ -11,6 +11,10 @@ # General audio backend options that are used for both playback and # recording. # +# @mixeng: use QEMU's mixing engine to mix all streams inside QEMU. When set to +# off, fixed-settings must be also off. Not every backend compatible +# with the off setting (default on, since 4.2) +# # @fixed-settings: use fixed settings for host input/output. When off, # frequency, channels and format must not be # specified (default true) @@ -31,6 +35,7 @@ ## { 'struct': 'AudiodevPerDirectionOptions', 'data': { + '*mixeng': 'bool', '*fixed-settings': 'bool', '*frequency': 'uint32', '*channels': 'uint32', diff --git a/qemu-options.hx b/qemu-options.hx index ea0638e92d..8de6deb691 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -433,6 +433,7 @@ DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev, " specifies the audio backend to use\n" " id= identifier of the backend\n" " timer-period= timer period in microseconds\n" + " in|out.mixeng= use mixeng to mix streams inside QEMU\n" " in|out.fixed-settings= use fixed settings for host audio\n" " in|out.frequency= frequency to use with fixed settings\n" " in|out.channels= number of channels to use with fixed settings\n" @@ -503,6 +504,11 @@ Identifies the audio backend. Sets the timer @var{period} used by the audio subsystem in microseconds. Default is 10000 (10 ms). +@item in|out.mixeng=on|off +Use QEMU's mixing engine to mix all streams inside QEMU. When off, +@var{fixed-settings} must be off too. Not every backend is fully +compatible with the off setting. Default is on. + @item in|out.fixed-settings=on|off Use fixed settings for host audio. When off, it will change based on how the guest opens the sound card. In this case you must not specify
This will allow us to disable mixeng when we use a decent backend. Disabling mixeng have a few advantages: * we no longer convert the audio output from one format to another, when the underlying audio system would just convert it to a third format. We no longer convert, only the underlying system, when needed. * the underlying system probably has better resampling and sample format converting methods anyway... * we may support formats that the mixeng currently does not support (S24 or float samples, more than two channels) * when using an audio server (like pulseaudio) different sound card outputs will show up as separate streams, even if we use only one backend Disadvantages: * audio capturing no longer works (wavcapture, and vnc audio extension) * some backends only support a single playback stream or very picky about the audio format. In this case we can't disable mixeng. However mixeng is not removed, only made optional, so this shouldn't be a big concern. Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> --- qapi/audio.json | 5 +++++ qemu-options.hx | 6 ++++++ 2 files changed, 11 insertions(+)