qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Zoltán Kővágó" <dirty.ice.hu@gmail.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [PATCH v4 21/24] paaudio: channel-map option
Date: Tue, 24 Sep 2019 02:43:32 +0200	[thread overview]
Message-ID: <55ea6ac9-9651-e322-fd84-22b4bedb3a93@gmail.com> (raw)
In-Reply-To: <87o8zbma1m.fsf@dusky.pond.sub.org>

On 2019-09-23 15:12, Markus Armbruster wrote:
> "Kővágó, Zoltán" <dirty.ice.hu@gmail.com> writes:
> 
>> Add an option to change the channel map used by pulseaudio.  If not
>> specified, falls back to an OSS compatible channel map.
>>
>> Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
>> ---
>>   audio/paaudio.c | 18 ++++++++++++++----
>>   qapi/audio.json |  7 +++++--
>>   qemu-options.hx |  9 +++++++++
>>   3 files changed, 28 insertions(+), 6 deletions(-)
>>
>> diff --git a/audio/paaudio.c b/audio/paaudio.c
>> index d195b1caa8..20402b0718 100644
>> --- a/audio/paaudio.c
>> +++ b/audio/paaudio.c
>> @@ -338,17 +338,27 @@ static pa_stream *qpa_simple_new (
>>           pa_stream_direction_t dir,
>>           const char *dev,
>>           const pa_sample_spec *ss,
>> -        const pa_channel_map *map,
>> +        const char *map,
>>           const pa_buffer_attr *attr,
>>           int *rerror)
>>   {
>>       int r;
>>       pa_stream *stream;
>>       pa_stream_flags_t flags;
>> +    pa_channel_map pa_map;
>>   
>>       pa_threaded_mainloop_lock(c->mainloop);
>>   
>> -    stream = pa_stream_new(c->context, name, ss, map);
>> +    if (map && !pa_channel_map_parse(&pa_map, map)) {
>> +        dolog("Invalid channel map specified: '%s'\n", map);
>> +        map = NULL;
>> +    }
>> +    if (!map) {
>> +        pa_channel_map_init_extend(&pa_map, ss->channels,
>> +                                   PA_CHANNEL_MAP_OSS);
>> +    }
>> +
>> +    stream = pa_stream_new(c->context, name, ss, &pa_map);
>>       if (!stream) {
>>           goto fail;
>>       }
>> @@ -421,7 +431,7 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
>>           PA_STREAM_PLAYBACK,
>>           ppdo->has_name ? ppdo->name : NULL,
>>           &ss,
>> -        NULL,                   /* channel map */
>> +        ppdo->has_channel_map ? ppdo->channel_map : NULL,
>>           &ba,                    /* buffering attributes */
>>           &error
>>           );
>> @@ -470,7 +480,7 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
>>           PA_STREAM_RECORD,
>>           ppdo->has_name ? ppdo->name : NULL,
>>           &ss,
>> -        NULL,                   /* channel map */
>> +        ppdo->has_channel_map ? ppdo->channel_map : NULL,
>>           &ba,                    /* buffering attributes */
>>           &error
>>           );
>> diff --git a/qapi/audio.json b/qapi/audio.json
>> index 0535eff794..07003808cb 100644
>> --- a/qapi/audio.json
>> +++ b/qapi/audio.json
>> @@ -214,13 +214,16 @@
>>   # @latency: latency you want PulseAudio to achieve in microseconds
>>   #           (default 15000)
>>   #
>> +# @channel-map: channel map to use (default: OSS compatible map, since: 4.2)
>> +#
>>   # Since: 4.0
>>   ##
>>   { 'struct': 'AudiodevPaPerDirectionOptions',
>>     'base': 'AudiodevPerDirectionOptions',
>>     'data': {
>> -    '*name': 'str',
>> -    '*latency': 'uint32' } }
>> +    '*name':        'str',
>> +    '*latency':     'uint32',
>> +    '*channel-map': 'str' } }
>>   
>>   ##
>>   # @AudiodevPaOptions:
>> diff --git a/qemu-options.hx b/qemu-options.hx
>> index 395427422a..f3bc342f98 100644
>> --- a/qemu-options.hx
>> +++ b/qemu-options.hx
>> @@ -471,6 +471,7 @@ DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev,
>>       "-audiodev pa,id=id[,prop[=value][,...]]\n"
>>       "                server= PulseAudio server address\n"
>>       "                in|out.name= source/sink device name\n"
>> +    "                in|out.channel-map= channel map to use\n"
>>   #endif
>>   #ifdef CONFIG_AUDIO_SDL
>>       "-audiodev sdl,id=id[,prop[=value][,...]]\n"
>> @@ -636,6 +637,14 @@ Sets the PulseAudio @var{server} to connect to.
>>   @item in|out.name=@var{sink}
>>   Use the specified source/sink for recording/playback.
>>   
>> +@item in|out.channel-map=@var{map}
>> +Use the specified channel map.  The default is an OSS compatible
>> +channel map.  Do not forget to escape commas inside the map:
> 
> Awkward.
> 
>> +
>> +@example
>> +-audiodev pa,id=example,sink.channel-map=front-left,,front-right
>> +@end example
> 
> Makes me realize new AudiodevPaPerDirectionOptions member @channel-map
> is a list encoded in a string.  QAPI heavily frowns upon encoding stuff
> in strings.  Any reason why you can't (or don't want to) make it
> ['str']?

Hmm, I don't think it's used too frequently on structs parsed by qapi 
opts visitor. What would be the command line format in that case? 
Something like this?

-audiodev 
pa,id=example,sink.channel-map=front-left,sink.channel-map=front-right

I think it's simply a string because while conceptually it's a string, 
we don't try to interpret it, we just pass the string to 
pa_channel_map_parse.  Of course we could take a list and instead either 
rebuild the string or reimplement half of pa_channel_map_parse by 
manually calling pa_channel_position_from_string.
Oh now that I looked again at the pulseaudio docs, channel-map doesn't 
have to be a list, it can be also a "well-known mapping name".

> 
>> +
>>   @end table
>>   
>>   @item -audiodev sdl,id=@var{id}[,@var{prop}[=@var{value}][,...]]



  reply	other threads:[~2019-09-24  0:45 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-19 21:24 [PATCH v4 00/24] Audio: Mixeng-free 5.1/7.1 audio support Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 01/24] audio: api for mixeng code free backends Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 02/24] alsaaudio: port to the new audio backend api Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 03/24] coreaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 04/24] dsoundaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 05/24] noaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 06/24] ossaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 07/24] paaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 08/24] sdlaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 10/24] wavaudio: " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 11/24] audio: remove remains of the old " Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 12/24] audio: unify input and output mixeng buffer management Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 13/24] audio: common rate control code for timer based outputs Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 14/24] audio: split ctl_* functions into enable_* and volume_* Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 15/24] audio: add mixing-engine option (documentation) Kővágó, Zoltán
2019-09-23 13:08   ` Markus Armbruster
2019-09-24  0:21     ` Zoltán Kővágó
2019-09-25  9:49       ` Markus Armbruster
2019-09-29 19:07         ` Zoltán Kővágó
2019-10-01  6:23           ` Markus Armbruster
2019-10-03 23:27             ` Zoltán Kővágó
2019-10-07  8:21               ` Markus Armbruster
2019-09-19 21:24 ` [PATCH v4 16/24] audio: make mixeng optional Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 18/24] audio: support more than two channels in volume setting Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 19/24] audio: replace shift in audio_pcm_info with bytes_per_frame Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 20/24] audio: basic support for multichannel audio Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 21/24] paaudio: channel-map option Kővágó, Zoltán
2019-09-23 13:12   ` Markus Armbruster
2019-09-24  0:43     ` Zoltán Kővágó [this message]
2019-09-25 12:17       ` Markus Armbruster
2019-09-25 14:13         ` Gerd Hoffmann
2019-09-29 18:13           ` Zoltán Kővágó
2019-09-30  6:36             ` Gerd Hoffmann
2019-09-19 21:24 ` [PATCH v4 22/24] usb-audio: do not count on avail bytes actually available Kővágó, Zoltán
2019-09-19 21:24 ` [PATCH v4 24/24] usbaudio: change playback counters to 64 bit Kővágó, Zoltán

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=55ea6ac9-9651-e322-fd84-22b4bedb3a93@gmail.com \
    --to=dirty.ice.hu@gmail.com \
    --cc=armbru@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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).