Jaroslav Kysela wrote:
> 
> On Tue, 9 Jul 2002, Abramo Bagnara wrote:
> 
> > > > > > And the summing/normalization code in pcm_route.c treats the sample as
> > > > > > if it were unsigned.
> > > >
> > > > Be careful here. Use of signed vs. unsigned was an hard decision.
> > > > Can you point me exactly where you see a problem?
> > >
> > > In the following code snippet
> > >
> > >         add_int64_att:
> > >                 sum.as_sint64 += (u_int64_t) sample * ttp->as_int;
> > >
> > > each of the three variables has a signed integer type. Converting
> > > the sample from int32_t to u_int64_t would give wrong results for
> > > negative values, e.g., the sample -1 (0xffffffff) would be converted
> > > to 4294967295 (0x00000000ffffffff).
> > >
> > > The following code
> > >
> > >         norm_int:
> > >                 if (sum.as_sint64 > (u_int32_t)0xffffffff)
> > >                         sample = (u_int32_t)0xffffffff;
> > >                 else
> > >                         sample = sum.as_sint64;
> > >
> > > doesn't check for negative values of sum.as_sint64. Additionally,
> > > using 0xffffffff in case of overflow results in sample == -1.
> > >
> > > These code snippets would be correct if the sample would be unsigned,
> > > but my point was that this isn't the case.
> >
> > I've just checked: this has been broken by Jaroslav with CVS version
> > 1.55. I'd like to restore the original behaviour I wrote (that used
> > unsigned for efficiency reason), but I don't understand what Jaroslav
> > tried to solve.
> >
> > Jaroslav?
> 
> You cannot use unsigned values, because we need to sum samples (it means:
> add positive and substract negative ones). If we are in positive range, we
> can only add samples, so the final sum result is wrong.

Wow, I've never realized this...
So mixing can only be done with signed values, otherwise we have bogus
value for overranges. Right?

Taken this in account, I'm tempted to consider unsigned formats as
second class citizen (i.e. format hard to handle and with some added
difficulties wrt manipulation). I'm wrong?

-- 
Abramo Bagnara                       mailto:[EMAIL PROTECTED]

Opera Unica                          Phone: +39.546.656023
Via Emilia Interna, 140
48014 Castel Bolognese (RA) - Italy


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Two, two, TWO treats in one.
http://thinkgeek.com/sf
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to