From: Jaroslaw Sobierski <fycio@gucio.com>
To: Jaroslav Kysela <perex@suse.cz>
Cc: Abramo Bagnara <abramo.bagnara@libero.it>,
"alsa-devel@lists.sourceforge.net"
<alsa-devel@lists.sourceforge.net>
Subject: Re: Re: dmix plugin
Date: Thu, 20 Feb 2003 00:30:30 -0800 [thread overview]
Message-ID: <1045729830.3e549226bab91@webmail.namezero.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0302191931340.1224-100000@pnote.perex-int.cz>
Quoting Jaroslav Kysela <perex@suse.cz>:
> I don't think so. It seems that my brain still remembers assembler ;-)
...
> sample = *sum;
> s16 s;
> - if (unlikely(sample & 0xffff0000))
> + if (unlikely(sample & 0x7fff0000))
> s = sample > 0 ? 0x7fff : -0x8000;
> else
> s = sample;
I think I remember some of the x86 assembly myself and this correction
does not fix the problem. This code will still "saturate" all negative
samples to -8000. You cannot detect an overflow into the upper half of
the register with a simple bitwise and. The actual test should be as
follows :
- extend the sign of the lower half
- check if the upper half is the same as the effect of expansion
if it is - there is no overflow
if it differs - there was overflow and you need to saturate.
examples :
value 0x 0000 0335
ext 0x 0000 0335
-> no overflow
value 0x 0002 43b1
ext 0x 0000 43b1
-> overflow
value 0x ffff f25b
ext 0x ffff f25b
-> no overflow
value 0x ff1c 35c9
ext 0x 0000 35c9
-> overflow
to put it in asm:
mov ebx,eax
cwde
cmp eax,ebx
The problem is cwde operates only on ax/eax.
This may sound complicated but in fact it amounts to a very simple
question : does the sample fit in a 16 bit int, or does it not, so
I guess in C it could look something like :
s16 s=sample;
if (unlikely(sample != (s32)s))
The cast is just there for clarity I believe it would be done
implicitly anyway. But don't take my word for it - I did not
test this.
--------------
Fycio (J.Sobierski)
fycio@gucio.com
-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge
next prev parent reply other threads:[~2003-02-20 8:30 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-17 15:32 Re: dmix plugin Jaroslaw Sobierski
2003-02-17 19:45 ` Jaroslav Kysela
2003-02-17 20:44 ` tomasz motylewski
2003-02-17 20:59 ` Jaroslav Kysela
2003-02-18 10:00 ` Abramo Bagnara
2003-02-18 12:52 ` Jaroslav Kysela
2003-02-18 13:10 ` Jaroslaw Sobierski
2003-02-18 13:19 ` Jaroslav Kysela
2003-02-18 14:51 ` Paul Davis
2003-02-18 16:51 ` Jaroslav Kysela
2003-02-18 21:07 ` Jaroslav Kysela
2003-02-19 10:20 ` Abramo Bagnara
2003-02-19 11:01 ` Jaroslav Kysela
2003-02-19 11:17 ` Abramo Bagnara
2003-02-19 13:49 ` Abramo Bagnara
2003-02-19 15:45 ` Jaroslaw Sobierski
2003-02-19 20:39 ` Abramo Bagnara
2003-02-19 18:34 ` Jaroslav Kysela
2003-02-19 21:24 ` Jaroslav Kysela
2003-02-20 8:28 ` Abramo Bagnara
2003-02-20 8:30 ` Jaroslaw Sobierski [this message]
2003-02-20 8:48 ` Abramo Bagnara
2003-02-20 9:17 ` Echoaudio drivers Giuliano Pochini
2003-02-20 14:37 ` David Olofson
2003-02-20 15:40 ` Giuliano Pochini
2003-02-20 16:03 ` David Olofson
2003-02-20 8:53 ` Re: dmix plugin Abramo Bagnara
2003-02-20 16:49 ` Jaroslav Kysela
2003-02-20 17:57 ` Abramo Bagnara
2003-02-20 18:26 ` Paul Davis
2003-02-20 19:23 ` unterminated conditionals: @HAVE_JACK_TRUE@ tomasz motylewski
2003-02-20 19:57 ` Jaroslav Kysela
2003-02-20 20:30 ` tomasz motylewski
2003-02-20 22:14 ` Re: dmix plugin Abramo Bagnara
2003-02-20 19:55 ` Jaroslav Kysela
2003-02-20 21:19 ` tomasz motylewski
2003-02-20 21:27 ` Jaroslav Kysela
2003-02-21 10:25 ` Abramo Bagnara
2003-02-21 14:08 ` Jaroslaw Sobierski
2003-02-19 10:33 ` Jaroslaw Sobierski
2003-02-19 11:08 ` Jaroslav Kysela
-- strict thread matches above, loose matches on Subject: below --
2003-02-17 22:28 Jaroslaw Sobierski
2003-02-17 16:18 Jaroslaw Sobierski
2003-02-17 13:12 Jaroslaw Sobierski
2003-02-17 13:22 ` Jaroslav Kysela
2003-02-17 18:15 ` Paul Davis
2003-02-18 22:36 ` Abramo Bagnara
2003-02-17 13:24 ` Jaroslav Kysela
2003-02-17 11:18 Jaroslaw Sobierski
2003-02-17 11:53 ` Jaroslav Kysela
2003-02-17 10:04 Jaroslaw Sobierski
2003-02-17 10:15 ` Jaroslav Kysela
2003-02-17 12:15 ` Abramo Bagnara
2003-02-17 13:12 ` Jaroslav Kysela
2003-02-17 13:29 ` Abramo Bagnara
2003-02-17 15:00 ` Jaroslav Kysela
2003-02-17 15:21 ` Abramo Bagnara
2003-02-17 10:32 ` tomasz motylewski
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=1045729830.3e549226bab91@webmail.namezero.com \
--to=fycio@gucio.com \
--cc=abramo.bagnara@libero.it \
--cc=alsa-devel@lists.sourceforge.net \
--cc=perex@suse.cz \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.