Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Tanu Kaskinen
On Wed, 2011-02-16 at 19:17 +0530, Arun Raghavan wrote:
  Can you elaborate on what you had in mind regarding UIs?
 
 As for UIs, it would probably be nice to have some sort of (hidden by
 default) way to show supported format in a sink. Of course, pactl/pacmd
 would expose this data too. Other than informative purposes, it would
 also make debugging simpler (Hey, my BT headset isn't playing MP3s
 automatically .. Can you check if it's actually supported using these
 simple steps?)

Yes, the supported formats should be provided in the sink introspection
data. This isn't necessarily relevant when creating streams, though.

Does the assumption, that all sinks support PCM streams, cause some
actual consequences in terms of API? I can't immediately see any
consequences - it seems like an implementation detail that can be
changed later. (I'd like to reserve the possibility to have
passthrough-only sinks in the future, just in case.)
   
   Fair enough. The only niggling API change would be adding a
   PA_FORMAT_PCM_ANY (it would be unwieldy to return one pa_format_info for
   each PCM format).
  
  I think the PA_SAMPLE_* enumeration should be left alone. Let it be a
  legacy thing for clients that aren't interested in anything else than
  PCM. pa_format_info doesn't need the pa_sample_spec member. The encoding
  type can be provided with a new enumeration with PA_ENCODING_PCM,
  PA_ENCODING_MP3 etc. Then the proplist, or whatever is chosen for
  representing the format set, can contain information saying that
  everything is supported.
 
 I didn't get the last bit about what you'd add to the proplist. The
 separate enum would work well for the format_info struct, but would you
 also suggest extending the API to use the encoding type while setting
 up/connecting streams?

I would suggest that the sinks and the clients use the same presentation
for describing the supported formats. It may be a proplist or something
else. In a purely proplist-based solution there may be no need to extend
the stream creation API. However, a purely proplist-based solution would
look hacky to me, but that's a matter of taste.

If I had to decide the format set representation now, I might do it as
follows:

typedef enum pa_encoding {
PA_ENCODING_PCM,
PA_ENCODING_MP3,
...
}

typedef struct pa_format_desc {
pa_encoding_t encoding;
pa_proplist *params; /* string - string: parameter name
  * to parameter value. The parameter
  * value has syntax for representing
  * also lists and ranges. Missing
  * parameter means that anything is
  * allowed, unknown parameters are
  * ignored. */
} pa_format_desc;

Uh, that ended up pretty identical to your pa_format_info proposal, even
though I didn't mean to :) I tried to replace the proplist with a
solution that doesn't require any string parsing, but that ended up very
complicated.

I'm proposing that a new function is added for creating streams that
takes a list of pa_format_desc structs (or maybe pa_format_info is a
better name) instead of sample spec and channel map.

-- 
Tanu

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Colin Guthrie
'Twas brillig, and Tanu Kaskinen at 17/02/11 07:45 did gyre and gimble:
 Your proposal would probably work well enough in practice, but I still
 would like more an approach where you create a stream and after it gets
 routed you finalize the stream format.

Yeah, I agree with this statement. It just feels cleaner (my comment
about the format being used in the routing would still be an issue here
but I agree that it was probably an extreme example that wouldn't really
be needed in practice anyway).

 If routing rules change before
 the format is decided, the daemon can tear down the stream and inform
 the client that it happened because of routing change. The client knows
 now that it should retry. In your proposal the client isn't aware that
 routing rules have changed, so it doesn't know why the connection fails.
 Also, even if connecting succeeds, but with different routing, the
 stream format that the client chooses may be suboptimal.
 
 So, my proposal is the following:
 
 Sinks have a list of format descriptions. One format description is a
 tuple consisting of the encoding type and some parameters that are
 characteristic for that encoding type. Depending on the parameter, a
 parameter value can be a single value, a range, a list or the parameter
 may be unset, meaning that anything is allowed. There should also be a
 special encoding type any, that means that the client supports
 anything (useful for recording applications that just dump the stream to
 a file).
 
 When a client creates a new stream, it gives a similar list of formats
 as described above for sinks. The list must cover all formats that the
 client can support (usually the list contains only one tuple with only
 fixed parameters). The daemon routes the stream to some sink, and then
 the daemon takes an intersection of the sink formats and the stream
 formats.
 
 If the resulting set contains exactly one fixed format, then that is
 used for the stream. If the set contains more options than one fixed
 format, then the daemon decides the best format using some unspecified
 algorithm. If the set is empty, then the stream creation fails.

When this fails, should we go back to the routing system and ask to be
routed again, but not to this failing sink? I can see this being a)
useful, but b) complicated (not so much complicated on initial
connection but complicated when a stream may get re-routed (i.e. when
a new, totally unrelated sink comes along, the routing system may
re-evaluate it's priority lists and try to move the stream to a higher
priority sink (i.e. the one that failed the first time).


 The client can also choose not to specify any formats. In that case the
 routing logic can't use the format as input for decisions, but currently
 there's no such routing logic anyway. After routing is done, the stream
 enters to a new state, PA_STREAM_ROUTED. In this state the client has to
 query the set of formats that the sink supports, and decide the final
 format. When the client sets the format, the stream changes state to
 PA_STREAM_READY.

Hmm, that could work... not really though through the implications of
adding a new state here, but I don't think it would cause major
headaches downstream.

Col



-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
  Mageia Contributor [http://www.mageia.org/]
  PulseAudio Hacker [http://www.pulseaudio.org/]
  Trac Hacker [http://trac.edgewall.org/]

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Arun Raghavan
On Thu, 2011-02-17 at 10:26 +0200, Tanu Kaskinen wrote:
 On Wed, 2011-02-16 at 19:17 +0530, Arun Raghavan wrote:
   Can you elaborate on what you had in mind regarding UIs?
  
  As for UIs, it would probably be nice to have some sort of (hidden by
  default) way to show supported format in a sink. Of course, pactl/pacmd
  would expose this data too. Other than informative purposes, it would
  also make debugging simpler (Hey, my BT headset isn't playing MP3s
  automatically .. Can you check if it's actually supported using these
  simple steps?)
 
 Yes, the supported formats should be provided in the sink introspection
 data. This isn't necessarily relevant when creating streams, though.

Ah, right. I was squashing things that aren't really related.

[...]
 I would suggest that the sinks and the clients use the same presentation
 for describing the supported formats. It may be a proplist or something
 else. In a purely proplist-based solution there may be no need to extend
 the stream creation API. However, a purely proplist-based solution would
 look hacky to me, but that's a matter of taste.
 
 If I had to decide the format set representation now, I might do it as
 follows:
 
 typedef enum pa_encoding {
 PA_ENCODING_PCM,
 PA_ENCODING_MP3,
 ...
 }
 
 typedef struct pa_format_desc {
 pa_encoding_t encoding;
 pa_proplist *params; /* string - string: parameter name
   * to parameter value. The parameter
   * value has syntax for representing
   * also lists and ranges. Missing
   * parameter means that anything is
   * allowed, unknown parameters are
   * ignored. */
 } pa_format_desc;
 
 Uh, that ended up pretty identical to your pa_format_info proposal, even
 though I didn't mean to :) I tried to replace the proplist with a
 solution that doesn't require any string parsing, but that ended up very
 complicated.

Good to see we converged on the same structure. :) 
bikeshed Building on the pa_sample_spec naming, pa_stream_spec,
perhaps? /bikeshed

 I'm proposing that a new function is added for creating streams that
 takes a list of pa_format_desc structs (or maybe pa_format_info is a
 better name) instead of sample spec and channel map.

Rethinking this, I'm starting to agree with you and Pierre on this. For
the PA_ENCODING_PCM, the proplist would basically just encode the same
data that's in pa_sample_spec. For other formats, we can add the data we
need.

I'm researching you other proposal and will update the proposal on the
wiki with both these in a while.

-- Arun

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


[pulseaudio-discuss] [RFC] Implement the volume sharing feature.

2011-02-17 Thread Tanu Kaskinen
DON'T COMMIT. This is just a request for comments. Testing this patch
isn't done properly yet.

When we have a filter sink that does some processing, currently the
benefits of the flat volume feature are not really available. That's
because if you have a music player that is connected to the filter sink,
the hardware sink doesn't have any idea of the music player's stream
volume.

This problem is solved by this volume sharing feature. The volume
sharing feature works so that the filter sinks that want to avoid the
previously described problem declare that they don't want to have
independent volume, but they follow the master sink volume instead.
The PA_SINK_SHARE_VOLUME_WITH_MASTER sink flag is used for that
declaration. Then the volume logic is changed so that the hardware
sink calculates its real volume using also the streams connected to the
filter sink in addition to the streams that are connected directly to
the hardware sink. Basically we're trying to create an illusion that
from volume point of view all streams are connected directly to the
hardware sink.

For that illusion to work, the volumes of the filter sinks and their
virtual streams have to be managed carefully according to a set of
rules:

If a filter sink follows the hardware sink volume, then the filter sink's
 * reference_volume always equals the hw sink's reference_volume
 * real_volume always equals the hw sink's real_volume
 * soft_volume is always 0dB (ie. no soft volume)

If a filter sink doesn't follow the hardware sink volume, then the filter
sink's
 * reference_volume can be whatever (completely independent from the hw sink)
 * real_volume always equals reference_volume
 * soft_volume always equals real_volume (and reference_volume)

If a filter sink follows the hardware sink volume, and the hardware sink
supports flat volume, then the filter sink's virtual stream's
 * volume always equals the hw sink's real_volume
 * reference_ratio is calculated normally from the stream volume and the hw
   sink's reference_volume
 * real_ratio always equals 0dB (follows from the first point)
 * soft_volume always equals volume_factor (follows from the previous point)

If a filter sink follows the hardware sink volume, and the hardware sink
doesn't support flat volume, then the filter sink's virtual stream's
 * volume is always 0dB
 * reference_ratio is always 0dB
 * real_ratio is always 0dB
 * soft_volume always equals volume_factor

If a filter sink doesn't follow the hardware sink volume, then the filter
sink's virtual stream is handled as a regular stream.

Since the volumes of the virtual streams are controlled by a set of rules,
the user is not allowed to change the virtual streams' volumes. It would
probably also make sense to forbid changing the filter sinks' volume, but
that's not strictly necessary, and currently changing a filter sink's volume
changes actually the hardware sink's volume, and from there it propagates to
all filter sinks (funny effects are expected when adjusting a single
channel in cases where all sinks don't have the same channel maps).
---
 src/pulse/def.h |   11 +
 src/pulsecore/protocol-native.c |2 +-
 src/pulsecore/sink-input.c  |  201 +--
 src/pulsecore/sink.c|  540 +++
 src/pulsecore/sink.h|4 +
 5 files changed, 575 insertions(+), 183 deletions(-)

diff --git a/src/pulse/def.h b/src/pulse/def.h
index 4a8da13..f6de7b3 100644
--- a/src/pulse/def.h
+++ b/src/pulse/def.h
@@ -749,6 +749,16 @@ typedef enum pa_sink_flags {
 /** The HW volume changes are syncronized with SW volume.
  * \since 1.0 */
 
+/** \cond fulldocs */
+/* PRIVATE: Server-side values -- do not try to use these at client-side.
+ * The server will filter out these flags anyway, so you should never see
+ * these flags in sinks. */
+
+PA_SINK_SHARE_VOLUME_WITH_MASTER = 0x0400U,
+/** This sink shares the volume with the master sink (used by some filter
+ * sinks). */
+/** \endcond */
+
 } pa_sink_flags_t;
 
 /** \cond fulldocs */
@@ -762,6 +772,7 @@ typedef enum pa_sink_flags {
 #define PA_SINK_DYNAMIC_LATENCY PA_SINK_DYNAMIC_LATENCY
 #define PA_SINK_PASSTHROUGH PA_SINK_PASSTHROUGH
 #define PA_SINK_SYNC_VOLUME PA_SINK_SYNC_VOLUME
+#define PA_SINK_SHARE_VOLUME_WITH_MASTER PA_SINK_SHARE_VOLUME_WITH_MASTER
 
 /** \endcond */
 
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 9257524..c812a3e 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2902,7 +2902,7 @@ static void sink_fill_tagstruct(pa_native_connection *c, 
pa_tagstruct *t, pa_sin
 PA_TAG_STRING, sink-monitor_source ? sink-monitor_source-name : 
NULL,
 PA_TAG_USEC, pa_sink_get_latency(sink),
 PA_TAG_STRING, sink-driver,
-PA_TAG_U32, sink-flags,
+PA_TAG_U32, sink-flags  ~PA_SINK_SHARE_VOLUME_WITH_MASTER,
 PA_TAG_INVALID);
 
 if (c-version = 13) {

Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Arun Raghavan
Hi Tanu,

On Thu, 2011-02-17 at 09:45 +0200, Tanu Kaskinen wrote:
 On Thu, 2011-02-17 at 02:54 +0530, Arun Raghavan wrote:
  On Wed, 2011-02-16 at 10:39 -0600, pl bossart wrote:
- I am not sure I understand how/when the query would be used. Seems
to me like a notification with the formats exposed by the sink
currently selected would be more usable. And if a change in routing
happens (new accessory, audio policy, etc), the client is informed and
can reconfigure to PCM if need be.
   
In this scheme, how would the client first determine what formats are
available? The notification will also be required - we can either
piggyback in sink, sink-input and card change notifications, or
introduce a new one for a change in available formats (I prefer the
latter).
   
   The problem is that you don't know on what sink you will play until
   you have actually created the pa_stream. The audio policy and routing
   rules may kick in and if you query before you connect you would end-up
   with a broken configuration.
  
  But the query API includes all the information that we can provide at
  stream creation/connect time, so things would only break if the query
  and connect are done with different parameters, or if the sink changed
  in the period between the two calls. It should be possible for clients
  to gracefully handle this and renegotiate.
 
 Your proposal would probably work well enough in practice, but I still
 would like more an approach where you create a stream and after it gets
 routed you finalize the stream format. If routing rules change before
 the format is decided, the daemon can tear down the stream and inform
 the client that it happened because of routing change. The client knows
 now that it should retry. In your proposal the client isn't aware that
 routing rules have changed, so it doesn't know why the connection fails.
 Also, even if connecting succeeds, but with different routing, the
 stream format that the client chooses may be suboptimal.
 
 So, my proposal is the following:

Thanks for the detailed proposal!

 Sinks have a list of format descriptions. One format description is a
 tuple consisting of the encoding type and some parameters that are
 characteristic for that encoding type. Depending on the parameter, a
 parameter value can be a single value, a range, a list or the parameter
 may be unset, meaning that anything is allowed. There should also be a
 special encoding type any, that means that the client supports
 anything (useful for recording applications that just dump the stream to
 a file).
 
 When a client creates a new stream, it gives a similar list of formats
 as described above for sinks. The list must cover all formats that the
 client can support (usually the list contains only one tuple with only
 fixed parameters). The daemon routes the stream to some sink, and then
 the daemon takes an intersection of the sink formats and the stream
 formats.
 
 If the resulting set contains exactly one fixed format, then that is
 used for the stream. If the set contains more options than one fixed
 format, then the daemon decides the best format using some unspecified
 algorithm. If the set is empty, then the stream creation fails.
 
 The client can also choose not to specify any formats. In that case the
 routing logic can't use the format as input for decisions, but currently
 there's no such routing logic anyway. After routing is done, the stream
 enters to a new state, PA_STREAM_ROUTED. In this state the client has to
 query the set of formats that the sink supports, and decide the final
 format. When the client sets the format, the stream changes state to
 PA_STREAM_READY.

This sounds pretty clean overall, and after talking to Wim on IRC for a
bit, I think we might even be able to do without the no-formats variant
of the API. That said, it would be nice to have the last bit as well, so
I'll keep it put it down as something to add after the basic bits are
done.

I've updated the wiki with this version now.

Cheers,
Arun

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Arun Raghavan
On Thu, 2011-02-17 at 09:13 +, Colin Guthrie wrote:
 'Twas brillig, and Tanu Kaskinen at 17/02/11 07:45 did gyre and gimble:
  Your proposal would probably work well enough in practice, but I still
  would like more an approach where you create a stream and after it gets
  routed you finalize the stream format.
 
 Yeah, I agree with this statement. It just feels cleaner (my comment
 about the format being used in the routing would still be an issue here
 but I agree that it was probably an extreme example that wouldn't really
 be needed in practice anyway).
 
  If routing rules change before
  the format is decided, the daemon can tear down the stream and inform
  the client that it happened because of routing change. The client knows
  now that it should retry. In your proposal the client isn't aware that
  routing rules have changed, so it doesn't know why the connection fails.
  Also, even if connecting succeeds, but with different routing, the
  stream format that the client chooses may be suboptimal.
  
  So, my proposal is the following:
  
  Sinks have a list of format descriptions. One format description is a
  tuple consisting of the encoding type and some parameters that are
  characteristic for that encoding type. Depending on the parameter, a
  parameter value can be a single value, a range, a list or the parameter
  may be unset, meaning that anything is allowed. There should also be a
  special encoding type any, that means that the client supports
  anything (useful for recording applications that just dump the stream to
  a file).
  
  When a client creates a new stream, it gives a similar list of formats
  as described above for sinks. The list must cover all formats that the
  client can support (usually the list contains only one tuple with only
  fixed parameters). The daemon routes the stream to some sink, and then
  the daemon takes an intersection of the sink formats and the stream
  formats.
  
  If the resulting set contains exactly one fixed format, then that is
  used for the stream. If the set contains more options than one fixed
  format, then the daemon decides the best format using some unspecified
  algorithm. If the set is empty, then the stream creation fails.
 
 When this fails, should we go back to the routing system and ask to be
 routed again, but not to this failing sink? I can see this being a)
 useful, but b) complicated (not so much complicated on initial
 connection but complicated when a stream may get re-routed (i.e. when
 a new, totally unrelated sink comes along, the routing system may
 re-evaluate it's priority lists and try to move the stream to a higher
 priority sink (i.e. the one that failed the first time).

I probably didn't understand this correctly, but wouldn't this only be
helpful if a new sink comes in exactly between when the routing fails
and when you retry?

-- Arun

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Tanu Kaskinen
On Thu, 2011-02-17 at 09:13 +, Colin Guthrie wrote:
  If the resulting set contains exactly one fixed format, then that is
  used for the stream. If the set contains more options than one fixed
  format, then the daemon decides the best format using some unspecified
  algorithm. If the set is empty, then the stream creation fails.
 
 When this fails, should we go back to the routing system and ask to be
 routed again, but not to this failing sink? I can see this being a)
 useful, but b) complicated (not so much complicated on initial
 connection but complicated when a stream may get re-routed (i.e. when
 a new, totally unrelated sink comes along, the routing system may
 re-evaluate it's priority lists and try to move the stream to a higher
 priority sink (i.e. the one that failed the first time).

Aargh! An unmatched left parenthesis creates an unresolved tension that
will stay with me all day! And here you put TWO unmatched parentheses,
I'll be tense also tomorrow :( Well, I think I can manage. Anyway, I
think this is completely up to the routing logic. It should check the
compatibility before doing the routing decision in the first place, if
it is somehow aware of the possibility of incompatibility. This way
there's no need to go back, which sounds very complicated.

-- 
Tanu

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support (extending proplists)

2011-02-17 Thread Arun Raghavan
On Wed, 2011-02-16 at 12:33 +, Colin Guthrie wrote:
 'Twas brillig, and Arun Raghavan at 16/02/11 04:42 did gyre and gimble:
  On Tue, 2011-02-15 at 12:33 -0600, pl bossart wrote:
  Please review/comment. Once we have some consensus, I'll send in patches
  to actually get this done.
  [...]
  - The receiver may support the same format at different sampling
  frequencies (eg MPEG at 32, 44.1 and 48kHz but not any other for BT).
  We will need to list explicitly which sampling frequencies are
  supported for each format.
  
  This one will probably be somewhat contentious. I was going to put this
  information in the format_info structure's proplist so clients can read
  and match as they please. There is one stumbling block here in that
  proplists do not allow list or range types.
  
  We can either support these by abusing the proplists a bit (for ranges
  have a prop.min and prop.max, for lists have prop.num_elements,
  prop.elem_0, prop.elem_1, etc.), using simple strings (the way
  GstCaps are done) or add first-class list and range types. Listed in
  increasing order of effort.
  
  IMO the first is too hacky. The second is quite flexible, but
  potentially too generic? The third is the most disruptive, but also most
  exactly suited to what we need.
  
  I'm leaning towards the second (string representation like (type) [min,
  max] for range and (type) { val1, val2, val3 } for list). In the
  current context, the type might be implicit in the key, but since this
  literally becomes part of the API, I'd like to plan ahead.
  
  Thoughts?
 
 Random suggestion:
  1. The range thing seems simple enough the prop.min and prop.max seems
 like an easy enough thing to list and support (perhaps even with a
 wrapper function if it saves a bit of sanity checking).
 
  2. The lists are slightly harder, so how about we just support JSON
 style syntax here for simple array storage? i.e. ['val1','val2','val\'s
 beyond'] ? Again a  wrapper function or two can help create/decode
 these? Using a format like JSON should be pretty simple and we could
 easily enough push out the whole proplist as a single JSON encoded thing
 at some point in the future if needed too.

We really should decide on what we need first, I guess :)

I assume that for a given property, the data type is implicitly
understood (this is how things work now).

The other thing to worry about is whether a given property should be
expected to only be either single-valued, a range or a list. This might
not be true - for example when querying a sink, you might get the
supported sample rates as a list, but when connecting, sample rate is
single-valued (we might not use properties to set the sample rate, but
as a generic data structure, I hope you see my point).

From the API perspective, perhaps we could add an enum to represent the
type (single-valued, multi-valued, range), and then have an API to query
this (like pa_proplist_get_type(proplist, key)) that clients would use
if multiple possibilities exist. We can then have API for each type.

Implementation wise, I think it's nicer to just have one key and do some
string parsing for the range case as well.

One thing to note here is that we cannot support lists of strings since,
aiui, JSON requires that strings be enclosed in quotes and we do not
currently do this for single-valued strings. The json.org site is down,
so if I'm wrong, I blame Wikipedia. :)

-- Arun

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] Build assembler errors on ARM OMAP3

2011-02-17 Thread Kurt Taylor
Thanks for your help Arun. I was finally able to come back to this problem.
Here is the last lines of a make on a clean git clone showing the errors on
the beagleboard (linaro ALIP).

Adding ite before the addcs did not build, adding itt built and ran, but
unloaded alsa module.

http://pastebin.com/Lqw0rEh9

Kurt Taylor (irc krtaylor)


On 14 February 2011 08:45, Arun Raghavan arun.ragha...@collabora.co.ukwrote:

 On Mon, 2011-02-07 at 12:52 -0600, Kurt Taylor wrote:
 
  I am seeing the following when trying to build pulseaudio on an
  ARM-based Beagleboard (OMAP3):
 
CC libpulsecore_1.0_la-svolume_arm.lo
  ../libtool: line 975: warning: setlocale: LC_MESSAGES: cannot change
  locale (en_GB.utf8)
  {standard input}: Assembler messages:
  {standard input}:82: Error: thumb conditional instruction should be in
  IT block -- `addcs r0,r8'
  {standard input}:83: Error: thumb conditional instruction should be in
  IT block -- `movcs r6,r0'
  {standard input}:98: Error: thumb conditional instruction should be in
  IT block -- `addcs r0,r8'
  {standard input}:99: Error: thumb conditional instruction should be in
  IT block -- `movcs r6,r0'
  {standard input}:119: Error: thumb conditional instruction should be
  in IT block -- `addcs r0,r8'
  {standard input}:120: Error: thumb conditional instruction should be
  in IT block -- `movcs r6,r0'
 
  I am using the normal build (bootstrap.sh, configure, make) on Linaro
  ALIP on the Beagleboard. The build worked fine on a Pandaboard with
  Ubuntu 10.10. It looks like something is different and not being
  detected via bootstrap/configure on ALIP.
 
  I believe configure has identified the architecture correctly. Also, I
  have searched and seen commits in the pulseaudio/ubuntu maillist
  archive for adding -Wa, -mimplicit-it=thumb. I have added this to
  CFLAGS without success.
 
  Any thoughts on what else I could try?

 What CFLAGS are you using? This should only turn up if you're compiling
 that assembly in Thumb-2 mode.

 I'm not sure if it would actually be desirable to compile in Thumb-2
 mode for the OMAP3, but the correct fix for this would probably be to
 add an ite cs before the addcs  in svolume_arm.c. Could you test this
 out (or let me know if you'd like a patch that does this)?

 -- Arun

 ___
 pulseaudio-discuss mailing list
 pulseaudio-discuss@mail.0pointer.de
 https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] Build assembler errors on ARM OMAP3

2011-02-17 Thread Kurt Taylor
Here is the output of gcc -dumpspecs

http://pastebin.com/Z2ZDVrbc

Kurt Taylor (irc krtaylor)


On 17 February 2011 12:10, Kurt Taylor kurt.tay...@linaro.org wrote:

 Thanks for your help Arun. I was finally able to come back to this
 problem.  Here is the last lines of a make on a clean git clone showing the
 errors on the beagleboard (linaro ALIP).

 Adding ite before the addcs did not build, adding itt built and ran, but
 unloaded alsa module.

 http://pastebin.com/Lqw0rEh9

 Kurt Taylor (irc krtaylor)



 On 14 February 2011 08:45, Arun Raghavan arun.ragha...@collabora.co.ukwrote:

 On Mon, 2011-02-07 at 12:52 -0600, Kurt Taylor wrote:
 
  I am seeing the following when trying to build pulseaudio on an
  ARM-based Beagleboard (OMAP3):
 
CC libpulsecore_1.0_la-svolume_arm.lo
  ../libtool: line 975: warning: setlocale: LC_MESSAGES: cannot change
  locale (en_GB.utf8)
  {standard input}: Assembler messages:
  {standard input}:82: Error: thumb conditional instruction should be in
  IT block -- `addcs r0,r8'
  {standard input}:83: Error: thumb conditional instruction should be in
  IT block -- `movcs r6,r0'
  {standard input}:98: Error: thumb conditional instruction should be in
  IT block -- `addcs r0,r8'
  {standard input}:99: Error: thumb conditional instruction should be in
  IT block -- `movcs r6,r0'
  {standard input}:119: Error: thumb conditional instruction should be
  in IT block -- `addcs r0,r8'
  {standard input}:120: Error: thumb conditional instruction should be
  in IT block -- `movcs r6,r0'
 
  I am using the normal build (bootstrap.sh, configure, make) on Linaro
  ALIP on the Beagleboard. The build worked fine on a Pandaboard with
  Ubuntu 10.10. It looks like something is different and not being
  detected via bootstrap/configure on ALIP.
 
  I believe configure has identified the architecture correctly. Also, I
  have searched and seen commits in the pulseaudio/ubuntu maillist
  archive for adding -Wa, -mimplicit-it=thumb. I have added this to
  CFLAGS without success.
 
  Any thoughts on what else I could try?

 What CFLAGS are you using? This should only turn up if you're compiling
 that assembly in Thumb-2 mode.

 I'm not sure if it would actually be desirable to compile in Thumb-2
 mode for the OMAP3, but the correct fix for this would probably be to
 add an ite cs before the addcs  in svolume_arm.c. Could you test this
 out (or let me know if you'd like a patch that does this)?

 -- Arun

 ___
 pulseaudio-discuss mailing list
 pulseaudio-discuss@mail.0pointer.de
 https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss



___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] [RFC] Passthrough support

2011-02-17 Thread Colin Guthrie
'Twas brillig, and Tanu Kaskinen at 17/02/11 17:17 did gyre and gimble:
 On Thu, 2011-02-17 at 09:13 +, Colin Guthrie wrote:
 If the resulting set contains exactly one fixed format, then that is
 used for the stream. If the set contains more options than one fixed
 format, then the daemon decides the best format using some unspecified
 algorithm. If the set is empty, then the stream creation fails.

 When this fails, should we go back to the routing system and ask to be
 routed again, but not to this failing sink? I can see this being a)
 useful, but b) complicated (not so much complicated on initial
 connection but complicated when a stream may get re-routed (i.e. when
 a new, totally unrelated sink comes along, the routing system may
 re-evaluate it's priority lists and try to move the stream to a higher
 priority sink (i.e. the one that failed the first time).
 
 Aargh! An unmatched left parenthesis creates an unresolved tension that
 will stay with me all day! And here you put TWO unmatched parentheses,
 I'll be tense also tomorrow :( Well, I think I can manage. 

Even more xkcd FTW :)

 Anyway, I
 think this is completely up to the routing logic. It should check the
 compatibility before doing the routing decision in the first place, if
 it is somehow aware of the possibility of incompatibility. This way
 there's no need to go back, which sounds very complicated.


I think you're right, it would have to know about the compatibility
before trying to move.

I'm kinda thinking ahead to the priority list approach here, at present
this is implemented pretty simply in that the check is simply is the
device available, whereas with this new approach we'd have to check is
the device available  is it compatible with the input. This isn't too
much extra logic or work so I think this makes sense.

With the likes of passthrough, routing decisions would also have to
check to see if the device is available to the degree that it's both
present and does not already have a passthrough stream attached (and is
thus operating in exclusive mode). So having such extra checks is
going to be needed anyway.

So I guess this all fits in nicely :)

Take care (..

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
  Mageia Contributor [http://www.mageia.org/]
  PulseAudio Hacker [http://www.pulseaudio.org/]
  Trac Hacker [http://trac.edgewall.org/]

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


Re: [pulseaudio-discuss] PA Roadmap Planning and LAC Conference

2011-02-17 Thread Maarten Bosmans
2011/2/17 Colin Guthrie gm...@colin.guthr.ie:
 There have been a few discussions recently about getting a solid roadmap
 organised for the next medium term of PA development. While the
 stable-queue stuff has been bubbling along nicely enough, there are
 several new features in the 1.x master branch but no real timescales
 decided. There are quite a few willing people out there these days which
 is really encouraging, but we need to get a solid focus on when to
 expect releases and what we hope to achieve in each one. This email is
 the start of that process.

A solid plan for the next releases would indeed be very nice.

 With regards to IRC meeting, I propose initially that we do this next
 week sometime (the sooner the better). For the sake of argument, I'll
 pick a time: 11am UTC Thursday 24th. Other timing suggestions welcome.
 I'd expect it to take at least 1h but probably less than 2h and it would
 be good if people involved could be fairly focused during the meeting
 window. I'll prepare an agenda and ensure that notes/logs are taken
 (with a meetbot) and made available afterwords. We will likely use a new
 IRC channel for this but anyone who wants to sit in, lurk or actively
 particpate would be most welcome.
  Q: Is this time suitable for everyone (Lennart in particular)?

I'll try to be there.

I'm not sure if there is space on the agenda, but I'd like to discuss
pavucontrol for a little bit. Not so much the current status, but
rather what our vision is to what it should be, especially compared to
the Gnome/KDE-specific alternatives.

Maarten
___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss