<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Comic Sans MS";
        panose-1:3 15 7 2 3 3 2 2 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
p
        {mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:SimSun;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Comic Sans MS";
        color:windowtext;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
/* Page Definitions */
@page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        layout-grid:15.6pt;}
div.Section1
        {page:Section1;}
-->
</style>
</head>
<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>
<div class=Section1 style='layout-grid:15.6pt'>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>Hi, Lennart<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>Sorry for being late, was fully
occupied by other tasks.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>I modified the volume
ramping feature per your suggestions.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>1, rewind envelop when rewinding
sink-input. And keep the envelop around until i->sink->max_rewind is
processed after the envelop is finished.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>2, make all envelop
manipulation inside the IO context, main thread just set the pa_envelope_def
and then send out SET_ENVELOPE message to let IO thread create the envelop. And
this will make it possible to create envelope in other places, not just inside set_volume_with_ramping
set_mute_with_ramping. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>3, future_volume,
future_mute is introduced to avoid distortion before envelop takes effect, e.g.
when unmute, if you change the thread_info.muted immediately, you will hear a
short loud sound before ramping up takes effect, future_mute could avoid this
issue. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>4, do not apply sink’s
volume when setting ramp info. Since it does not help a lot to avoid
calculation overflow.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>I do not use pa_envelope_replace,
it seems envelope_replace is intend to replace the pa_envelope_def inside pa_envelope_item,
our code only has one pa_envelope_def, if I call replace, it’s like
replace myself with myself, I’m not sure if that is proper.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>I’m sorry I didn’t
have time to make envelop be able to aware of balancing stuff, will it be
possible to make it as a future enhancement? <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>Thanks for your review!<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>From
bf68ed5814ab313007a42cbe64210c61c2de78c9 Mon Sep 17 00:00:00 2001<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>From: zbt
<huan.zheng@intel.com><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>Date: Tue, 14 Jul 2009
14:58:00 +0800<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>Subject: [PATCH] Add
volume ramping feature<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>---<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> src/pulsecore/envelope.c
| 365 ++++++++++++++++++++++++++++++++++----------<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> src/pulsecore/envelope.h
| 3 +<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> src/pulsecore/sink-input.c
| 351 +++++++++++++++++++++++++++++++++++-------<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> src/pulsecore/sink-input.h
| 21 +++<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> src/pulsecore/sink.c
| 6 +-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> 5 files changed, 605
insertions(+), 141 deletions(-)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>diff --git
a/src/pulsecore/envelope.c b/src/pulsecore/envelope.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>index fd6a948..ebf0bd5
100644<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>---
a/src/pulsecore/envelope.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+++
b/src/pulsecore/envelope.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -177,7 +177,7 @@ static
int32_t item_get_int(pa_envelope_item *i, pa_usec_t x) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(i->j > 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(i->def->points_x[i->j-1] <= x);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(x < i->def->points_x[i->j]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(x <= i->def->points_x[i->j]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return linear_interpolate_int(i->def->points_x[i->j-1],
i->def->points_y.i[i->j-1],<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
i->def->points_x[i->j],
i->def->points_y.i[i->j], x);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -200,7 +200,7 @@ static
float item_get_float(pa_envelope_item *i, pa_usec_t x) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(i->j > 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(i->def->points_x[i->j-1] <= x);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(x < i->def->points_x[i->j]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(x <= i->def->points_x[i->j]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return linear_interpolate_float(i->def->points_x[i->j-1],
i->def->points_y.f[i->j-1],<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
i->def->points_x[i->j], i->def->points_y.f[i->j], x);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -550,7 +550,7 @@ static
int32_t linear_get_int(pa_envelope *e, int v) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
e->points[v].cached_valid = TRUE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- return
e->points[v].y.i[e->points[v].n_current] + (e->points[v].cached_dy_i *
(int32_t) (e->x - e->points[v].x[e->points[v].n_current])) / (int32_t)
e->points[v].cached_dx;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ return
e->points[v].y.i[e->points[v].n_current] +
((float)e->points[v].cached_dy_i * (int32_t) (e->x -
e->points[v].x[e->points[v].n_current])) / (int32_t)
e->points[v].cached_dx;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> static float
linear_get_float(pa_envelope *e, int v) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -596,35 +596,61 @@ void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
p = (uint8_t*) pa_memblock_acquire(chunk->memblock) + chunk->index;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
fs = pa_frame_size(&e->sample_spec);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
n = chunk->length;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Envelop position %d applying factor %d=%f, sample spec is
%d, chunk's length is %d, fs is %d\n", e->x, linear_get_int(e, v),
((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
switch (e->sample_spec.format) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
</span></font><font size=2 face="Comic Sans MS"><span lang=FR style='font-size:
10.0pt;font-family:"Comic Sans MS"'>case PA_SAMPLE_U8: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
uint8_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint8_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint8_t*) p + n;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = (uint8_t) (((factor * ((int16_t) *t - 0x80)) / 0x10000) + 0x80);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t t, hi, lo;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
hi = factor >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
lo = factor & 0xFFFF;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int32_t) *d - 0x80;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = ((t * lo) >> 16) + (t * hi);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80, 0x7F);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = (uint8_t) (t + 0x80);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_ULAW: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
uint8_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int16_t k = st_ulaw2linear16(*t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = (uint8_t) st_14linear2ulaw((int16_t) (((factor * k) / 0x10000) >>
2));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint8_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint8_t*) p + n;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t t, hi, lo;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
hi = factor >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
lo = factor & 0xFFFF;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int32_t) st_ulaw2linear16(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = ((t * lo) >> 16) + (t * hi);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = (uint8_t) st_14linear2ulaw((int16_t) t >> 2);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -632,48 +658,83 @@ void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_ALAW: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
uint8_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint8_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint8_t*) p + n;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int16_t k = st_alaw2linear16(*t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = (uint8_t) st_13linear2alaw((int16_t) (((factor * k) / 0x10000) >>
3));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t t, hi, lo;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
hi = factor >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
lo = factor & 0xFFFF;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int32_t) st_alaw2linear16(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = ((t * lo) >> 16) + (t * hi);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = (uint8_t) st_13linear2alaw((int16_t) t >> 3);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_S16NE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int16_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = (int16_t) ((factor * *t) / 0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int16_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (int16_t*) p + n/sizeof(int16_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t t, hi, lo;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
hi = factor >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
lo = factor & 0xFFFF;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int32_t)(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = ((t * lo) >> 16) + (t * hi);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ *d
= (int16_t) t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_S16RE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int16_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int16_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (int16_t*) p + n/sizeof(int16_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int16_t r = (int16_t) ((factor * PA_INT16_SWAP(*t)) / 0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = PA_INT16_SWAP(r);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t t, hi, lo;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
hi = factor >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
lo = factor & 0xFFFF;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int32_t) PA_INT16_SWAP(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = ((t * lo) >> 16) + (t * hi);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = PA_INT16_SWAP((int16_t) t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -681,40 +742,59 @@ void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_S32NE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c <
e->sample_spec.channels; c++, t++)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = (int32_t) (((int64_t) factor * (int64_t) *t) / 0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e,
v);
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (int32_t*) p + n/sizeof(int32_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t)(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = (int32_t) t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
} <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_S32RE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
for (c = 0; c < e->sample_spec.channels; c++, t++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
int32_t r = (int32_t) (((int64_t) factor * (int64_t) PA_INT32_SWAP(*t)) /
0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
*t = PA_INT32_SWAP(r);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (int32_t*) p + n/sizeof(int32_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t) PA_INT32_SWAP(*d);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = PA_INT32_SWAP((int32_t) t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_FLOAT32NE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/*Seems the FLOAT32NE part of pa_volume_memchunk not right, do not reuse here*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
float *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
float factor = linear_get_float(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
unsigned c;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -723,11 +803,12 @@ void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
</span></font><font size=2 face="Comic Sans MS"><span lang=FR style='font-size:
10.0pt;font-family:"Comic Sans MS"'>for (c = 0; c <
e->sample_spec.channels; c++, t++)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
*t = *t * factor;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
</span></font><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SAMPLE_FLOAT32RE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/*Seems the FLOAT32RE part of pa_volume_memchunk not right, do not reuse here*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
float *t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
for (t = p; n > 0; n -= fs) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -744,10 +825,101 @@
void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
case PA_SAMPLE_S24LE:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
case PA_SAMPLE_S24BE:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
case PA_SAMPLE_S24_32LE:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
case PA_SAMPLE_S24_32BE:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
case PA_SAMPLE_S24NE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint8_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint8_t*) p + n/3;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t)((int32_t) (PA_READ24NE(d) << 8));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
PA_WRITE24NE(d, ((uint32_t) (int32_t) t) >> 8);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
case PA_SAMPLE_S24RE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint8_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint8_t*) p + n/3;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t)((int32_t) (PA_READ24RE(d) << 8));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
PA_WRITE24RE(d, ((uint32_t) (int32_t) t) >> 8);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
case PA_SAMPLE_S24_32NE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint32_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint32_t*) p + n/sizeof(uint32_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t) ((int32_t) (*d << 8));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ t
= (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = ((uint32_t) ((int32_t) t)) >> 8;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
case PA_SAMPLE_S24_32RE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
uint32_t *d, *s;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
unsigned channel;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t factor = linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
s = (uint32_t*) p + n/sizeof(uint32_t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
for (channel = 0, d = p; d < s; d++) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int64_t t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (int64_t) ((int32_t) (PA_UINT32_SWAP(*d) << 8));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = (t * factor) >> 16;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*d = PA_UINT32_SWAP(((uint32_t) ((int32_t) t)) >> 8);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
channel = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x += fs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ factor
= linear_get_int(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
break;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
/* FIXME */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert_not_reached();<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -757,8 +929,6 @@ void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_memblock_release(chunk->memblock);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x += chunk->length;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }
else {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
/* When we have no envelope to apply we reset our origin */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
e->x = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -774,13 +944,48 @@ void
pa_envelope_rewind(pa_envelope *e, size_t n_bytes) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
envelope_begin_read(e, &v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- if
(n_bytes < e->x)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x -= n_bytes;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(e->x - n_bytes <= e->points[v].x[0])<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x = e->points[v].x[0];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'> </span></font><font
size=2 face="Comic Sans MS"><span lang=EN-US style='font-size:10.0pt;
font-family:"Comic Sans MS"'>else<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
e->x = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x -= n_bytes;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
e->points[v].n_current = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
e->points[v].cached_valid = FALSE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
envelope_commit_read(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> </span></font><font
size=2 face="Comic Sans MS"><span lang=FR style='font-size:10.0pt;font-family:
"Comic Sans MS"'>}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_envelope_restart(pa_envelope* e) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ int v;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
envelope_begin_read(e, &v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
e->x = e->points[v].x[0];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
envelope_commit_read(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+pa_bool_t
pa_envelope_is_finished(pa_envelope* e) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ int v;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_bool_t finished;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ envelope_begin_read(e,
&v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
finished = (e->x >= e->points[v].x[e->points[v].n_points-1]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
envelope_commit_read(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ return
finished;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+int32_t
pa_envelope_length(pa_envelope *e) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ int v;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ size_t
size;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
envelope_begin_read(e, &v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ size =
e->points[v].x[e->points[v].n_points-1] - e->points[v].x[0];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
envelope_commit_read(e, v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ return
size;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>diff --git
a/src/pulsecore/envelope.h b/src/pulsecore/envelope.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>index 5296415..4fa3657 100644<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>---
a/src/pulsecore/envelope.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+++
b/src/pulsecore/envelope.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -49,5 +49,8 @@
pa_envelope_item *pa_envelope_replace(pa_envelope *e, pa_envelope_item *i,
const<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_envelope_remove(pa_envelope *e, pa_envelope_item *i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_envelope_rewind(pa_envelope *e, size_t n_bytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_envelope_restart(pa_envelope* e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+pa_bool_t
pa_envelope_is_finished(pa_envelope* e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+int32_t
pa_envelope_length(pa_envelope *e);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #endif<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>diff --git a/src/pulsecore/sink-input.c
b/src/pulsecore/sink-input.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>index a5f9635..29c259f
100644<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>---
a/src/pulsecore/sink-input.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+++
b/src/pulsecore/sink-input.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -38,6 +38,7 @@<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
<pulsecore/play-memblockq.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
<pulsecore/namereg.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include <pulsecore/core-util.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+#include
<pulse/timeval.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
"sink-input.h"<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -47,6 +48,11 @@<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> static
PA_DEFINE_CHECK_TYPE(pa_sink_input, pa_msgobject);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> static void
sink_input_free(pa_object *o);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t
pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute,
pa_usec_t t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void sink_input_volume_ramping(pa_sink_input*
i, pa_memchunk* chunk);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_release_envelope(pa_sink_input *i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> pa_sink_input_new_data*
pa_sink_input_new_data_init(pa_sink_input_new_data *data) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(data);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -301,6 +307,16 @@ int
pa_sink_input_new(<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
reset_callbacks(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
i->userdata = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /* Set
Ramping info */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.is_ramping = FALSE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dead = TRUE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.item = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dying = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_v, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_m, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
i->thread_info.state = i->state;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
i->thread_info.attached = FALSE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_atomic_store(&i->thread_info.drained, 1);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -480,6 +496,12 @@
static void sink_input_free(pa_object *o) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_assert(!i->thread_info.attached);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(i->thread_info.ramp_info.envelope) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug ("Freeing envelope\n");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_free(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (i->thread_info.render_memblockq)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_memblockq_free(i->thread_info.render_memblockq);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -565,6 +587,7 @@
pa_usec_t pa_sink_input_get_latency(pa_sink_input *i, pa_usec_t *sink_latency)
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */,
pa_memchunk *chunk, pa_cvolume *volume) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_bool_t do_volume_adj_here;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_bool_t volume_is_norm;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_bool_t ramping;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
size_t block_size_max_sink, block_size_max_sink_input;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
size_t ilength;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -608,7 +631,7 @@ void
pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
* to adjust the volume *before* we resample. Otherwise we can do<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
* it after and leave it for the sink code */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
do_volume_adj_here = !pa_channel_map_equal(&i->channel_map,
&i->sink->channel_map);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
do_volume_adj_here = !pa_channel_map_equal(&i->channel_map,
&i->sink->channel_map) || i->thread_info.ramp_info.is_ramping;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
volume_is_norm = pa_cvolume_is_norm(&i->thread_info.soft_volume)
&& !i->thread_info.muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
while (!pa_memblockq_is_readable(i->thread_info.render_memblockq)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -649,7 +672,7 @@ void
pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
wchunk.length = block_size_max_sink_input;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
/* It might be necessary to adjust the volume here */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
if (do_volume_adj_here && !volume_is_norm) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (do_volume_adj_here && !volume_is_norm &&
!i->thread_info.ramp_info.is_ramping) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_memchunk_make_writable(&wchunk, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (i->thread_info.muted)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -691,6 +714,23 @@ void
pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (chunk->length > block_size_max_sink)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
chunk->length = block_size_max_sink;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
ramping = i->thread_info.ramp_info.is_ramping;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(ramping)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
sink_input_volume_ramping(i, chunk);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(!i->thread_info.ramp_info.envelope_dead) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dying += chunk->length;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Envelope dying is %d, chunk length is %d, dead thresholder
is %d\n", i->thread_info.ramp_info.envelope_dying,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
chunk->length,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->sink->thread_info.max_rewind +
pa_envelope_length(i->thread_info.ramp_info.envelope));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (i->thread_info.ramp_info.envelope_dying >=
(i->sink->thread_info.max_rewind +
pa_envelope_length(i->thread_info.ramp_info.envelope))) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("RELEASE Envelop");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dead = TRUE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
sink_input_release_envelope(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
/* Let's see if we had to apply the volume adjustment ourselves,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
* or if this can be done by the sink for us */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -733,6 +773,7 @@ void
pa_sink_input_process_rewind(pa_sink_input *i, size_t nbytes /* in sink sam<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (nbytes > 0 && !i->thread_info.dont_rewind_render) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_log_debug("Have to rewind %lu bytes on render memblockq.",
(unsigned long) nbytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_memblockq_rewind(i->thread_info.render_memblockq, nbytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
sink_input_rewind_ramp_info(i, nbytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (i->thread_info.rewrite_nbytes == (size_t) -1) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -873,50 +914,8 @@
pa_usec_t pa_sink_input_get_requested_latency(pa_sink_input *i) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> /* Called from main
context */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void pa_sink_input_set_volume(pa_sink_input
*i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_cvolume v;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_sink_input_assert_ref(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(pa_cvolume_valid(volume));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(pa_cvolume_compatible(volume, &i->sample_spec));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- if
((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
v = i->sink->reference_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_cvolume_remap(&v, &i->sink->channel_map,
&i->channel_map);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
volume = pa_sw_cvolume_multiply(&v, &v, volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- if
(pa_cvolume_equal(volume, &i->virtual_volume))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
return;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->virtual_volume = *volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->save_volume = save;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- if
(i->sink->flags & PA_SINK_FLAT_VOLUME) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_cvolume new_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
/* We are in flat volume mode, so let's update all sink input<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
* volumes and update the flat volume of the sink */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_sink_update_flat_volume(i->sink, &new_volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_sink_set_volume(i->sink, &new_volume, FALSE, TRUE, FALSE, FALSE);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- } else
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
/* OK, we are in normal volume mode. The volume only affects<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
* ourselves */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_sink_input_set_relative_volume(i, volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
/* Hooks have the ability to play games with i->soft_volume */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
/* Copy the new soft_volume to the thread_info struct */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- /* The
virtual volume changed, let's tell people so */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE,
i->index);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /*
test ramping -> return pa_sink_input_set_volume_with_ramping(i, volume,
save, absolute, 2000 * PA_USEC_PER_MSEC); */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ return
pa_sink_input_set_volume_with_ramping(i, volume, save, absolute, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> /* Called from main
context */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -985,18 +984,8 @@ void
pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> /* Called from main
context */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_sink_input_set_mute(pa_sink_input *i, pa_bool_t mute, pa_bool_t save) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_sink_input_assert_ref(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>- if
(!i->muted == !mute)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
return;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->muted = mute;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->save_muted = save;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
pa_subscription_post(i->core,
PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /*
test ramping -> return pa_sink_input_set_mute_with_ramping(i, mute, save,
2000 * PA_USEC_PER_MSEC); */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ return
pa_sink_input_set_mute_with_ramping(i, mute, save, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> /* Called from main
context */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -1347,15 +1336,23 @@
int pa_sink_input_process_msg(pa_msgobject *o, int code, void *userdata,
int64_t<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
switch (code) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (pa_atomic_load(&i->before_ramping_v))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.future_soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (!pa_cvolume_equal(&i->thread_info.soft_volume,
&i->soft_volume)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->thread_info.soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (!pa_atomic_load(&i->before_ramping_v))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
case PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (pa_atomic_load(&i->before_ramping_m))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.future_muted = i->muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (i->thread_info.muted != i->muted) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->thread_info.muted = i->muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (!pa_atomic_load(&i->before_ramping_m))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ i->thread_info.muted
= i->muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -1403,6 +1400,26 @@ int
pa_sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
*r = i->thread_info.requested_sink_latency;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
case PA_SINK_INPUT_MESSAGE_SET_ENVELOPE: {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (!i->thread_info.ramp_info.envelope)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope =
pa_envelope_new(&i->sink->sample_spec);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (i->thread_info.ramp_info.envelope &&
i->thread_info.ramp_info.item) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_remove(i->thread_info.ramp_info.envelope,
i->thread_info.ramp_info.item);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.item = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.item =
pa_envelope_add(i->thread_info.ramp_info.envelope, &i->using_def);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.is_ramping = TRUE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dead = FALSE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dying = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (i->thread_info.ramp_info.envelope)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_restart(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
return 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
return -PA_ERR_NOTIMPLEMENTED;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -1550,3 +1567,217 @@
finish:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (pl)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_proplist_free(pl);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* Called from IO context
*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_volume_ramping(pa_sink_input* i, pa_memchunk* chunk) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(chunk);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(chunk->memblock);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i->thread_info.ramp_info.is_ramping);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /*
Volume is adjusted with ramping effect here */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_apply(i->thread_info.ramp_info.envelope, chunk);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(pa_envelope_is_finished(i->thread_info.ramp_info.envelope)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.is_ramping = FALSE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (pa_atomic_load(&i->before_ramping_v)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.soft_volume = i->thread_info.future_soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_v, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
else if (pa_atomic_load(&i->before_ramping_m)) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.muted = i->thread_info.future_muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_m, 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ * Called from main
context<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ * This function should
be called inside pa_sink_input_set_volume_with_ramping <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ * should be called after
soft_volume of sink_input and sink are all adjusted<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t
pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t target_abs_vol, target_apply_vol, pre_apply_vol;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Sink input's soft volume is %d= %f ",
pa_cvolume_avg(&i->soft_volume),
pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /*
Calculation formula are target_abs_vol := i->soft_volume<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*
target_apply_vol := lrint(pa_sw_volume_to_linear(target_abs_vol) * 0x10000)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*
pre_apply_vol := ( previous_virtual_volume / target_virtual_volume ) *
target_apply_vol<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
* Will do volume adjustment inside pa_sink_input_peek<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
target_abs_vol = pa_cvolume_avg(&i->soft_volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
target_apply_vol = (int32_t) lrint(pa_sw_volume_to_linear(target_abs_vol) *
0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pre_apply_vol = (int32_t) ((pa_sw_volume_to_linear(pre_virtual_volume) /
pa_sw_volume_to_linear(target_virtual_volume)) * target_apply_vol);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.n_points = 2;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_x[0] = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_x[1] = t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[0] = pre_apply_vol;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[1] = target_apply_vol;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0])
/0x10000;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1])
/0x10000;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Volume Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n",
i->using_def.points_y.i[0], i->using_def.points_y.f[0],<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[1], i->using_def.points_y.f[1]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* Called from main
context */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute, pa_usec_t
t) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t cur_vol;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.n_points = 2;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_x[0] = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_x[1] = t;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
cur_vol = (int32_t) lrint(
pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)) * 0x10000);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(mute) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[0] = cur_vol;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[1] = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ } else
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[0] = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[1] = cur_vol; <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0])
/0x10000;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1])
/0x10000;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Mute Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n",
i->using_def.points_y.i[0], i->using_def.points_y.f[0],<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->using_def.points_y.i[1], i->using_def.points_y.f[1]);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* Called from IO context
*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_release_envelope(pa_sink_input *i) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(!i->thread_info.ramp_info.is_ramping);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i->thread_info.ramp_info.envelope_dead);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_free(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.item = NULL;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* Called from IO context
*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+static void
sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (!i->thread_info.ramp_info.envelope_dead)
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t envelope_length =
pa_envelope_length(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (i->thread_info.ramp_info.envelope_dying > envelope_length) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if ((i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length)
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Envelope Become Alive");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_rewind(i->thread_info.ramp_info.envelope, envelope_length -
(i->thread_info.ramp_info.envelope_dying - nbytes));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.is_ramping = TRUE;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
} else if (i->thread_info.ramp_info.envelope_dying < envelope_length) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if ((i->thread_info.ramp_info.envelope_dying - nbytes) <= 0) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Envelope Restart");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_restart(i->thread_info.ramp_info.envelope);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
else {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("Envelope Simple Rewind");<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_rewind(i->thread_info.ramp_info.envelope, nbytes);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
} <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dying -= nbytes;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (i->thread_info.ramp_info.envelope_dying <= 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.ramp_info.envelope_dying = 0;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume
*volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t){<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_cvolume v;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_volume_t previous_virtual_volume, target_virtual_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_sink_input_assert_ref(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=FR
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(pa_cvolume_valid(volume));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(pa_cvolume_compatible(volume, &i->sample_spec));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
v = i->sink->reference_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_cvolume_remap(&v, &i->sink->channel_map,
&i->channel_map);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
volume = pa_sw_cvolume_multiply(&v, &v, volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(pa_cvolume_equal(volume, &i->virtual_volume))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
return;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
previous_virtual_volume = pa_cvolume_avg(&i->virtual_volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
target_virtual_volume = pa_cvolume_avg(volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (t
> 0 && target_virtual_volume > 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_log_debug("SetVolumeWithRamping: Virtual Volume From %u=%f to
%u=%f\n", previous_virtual_volume,
pa_sw_volume_to_linear(previous_virtual_volume),<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
target_virtual_volume, pa_sw_volume_to_linear(target_virtual_volume));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->virtual_volume = *volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->save_volume = save; <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /* Set
this flag before the following code modify i->thread_info.soft_volume */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (t
> 0 && target_virtual_volume > 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_v, 1);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(i->sink->flags & PA_SINK_FLAT_VOLUME) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_cvolume new_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/* We are in flat volume mode, so let's update all sink input<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
* volumes and update the flat volume of the sink */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_sink_update_flat_volume(i->sink, &new_volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_sink_set_volume(i->sink, &new_volume, FALSE, TRUE, FALSE, FALSE);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ } else
{<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/* OK, we are in normal volume mode. The volume only affects<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
* ourselves */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_sink_input_set_relative_volume(i, volume);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/* Hooks have the ability to play games with i->soft_volume */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
/* Copy the new soft_volume to the thread_info struct */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (t
> 0 && target_virtual_volume > 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
sink_input_set_ramping_info(i, previous_virtual_volume, target_virtual_volume,
t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /* The
virtual volume changed, let's tell people so */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_subscription_post(i->core,
PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t
save, pa_usec_t t){<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_sink_input_assert_ref(i);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if
(!i->muted == !mute)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
return;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->muted = mute;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->save_muted = save;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ /* Set
this flag before the following code modify i->thread_info.muted, otherwise
distortion will be heard */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (t
> 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_store(&i->before_ramping_m, 1);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i),
PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE, NULL, 0, NULL) == 0);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ if (t
> 0)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
sink_input_set_ramping_info_for_mute(i, mute, t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+ <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE,
i->index);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>diff --git
a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>index 98144d4..036806f
100644<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>---
a/src/pulsecore/sink-input.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+++
b/src/pulsecore/sink-input.h<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -35,6 +35,7 @@ typedef
struct pa_sink_input pa_sink_input;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
<pulsecore/client.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
<pulsecore/sink.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #include
<pulsecore/core.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+#include
<pulsecore/envelope.h><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> typedef enum
pa_sink_input_state {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
PA_SINK_INPUT_INIT, /*< The
stream is not active yet, because pa_sink_put() has not been called yet */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -212,8 +213,23 @@
struct pa_sink_input {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_usec_t requested_sink_latency;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_hashmap *direct_outputs;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
struct {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_bool_t is_ramping:1;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_bool_t envelope_dead:1;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
int32_t envelope_dying; /* Increasing while envelop is not dead. Reduce
it while process_rewind. */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope *envelope;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_item *item;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
} ramp_info;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_cvolume future_soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_bool_t future_muted;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }
thread_info;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_t before_ramping_v; /* Indicates future volume */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_atomic_t before_ramping_m; /* Indicates future mute */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
pa_envelope_def using_def;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
*userdata;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> };<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -228,6 +244,7 @@ enum {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
PA_SINK_INPUT_MESSAGE_SET_STATE,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
PA_SINK_INPUT_MESSAGE_SET_REQUESTED_LATENCY,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
PA_SINK_INPUT_MESSAGE_GET_REQUESTED_LATENCY,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
PA_SINK_INPUT_MESSAGE_SET_ENVELOPE,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
PA_SINK_INPUT_MESSAGE_MAX<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> };<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -359,4 +376,8 @@
pa_memchunk* pa_sink_input_get_silence(pa_sink_input *i, pa_memchunk *ret);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> /* To be used by
sink.c only */<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> void
pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+/* Volume ramping*/<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume
*volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+void
pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t
save, pa_usec_t t);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> #endif<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>diff --git
a/src/pulsecore/sink.c b/src/pulsecore/sink.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>index d8f3c7d..2950071
100644<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>--- a/src/pulsecore/sink.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+++ b/src/pulsecore/sink.c<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>@@ -1599,10 +1599,14 @@
static void sync_input_volumes_within_thread(pa_sink *s) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_sink_assert_ref(s);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> while
((i = PA_SINK_INPUT(pa_hashmap_iterate(s->thread_info.inputs, &state,
NULL)))) {<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (pa_atomic_load(&i->before_ramping_v))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.future_soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
if (pa_cvolume_equal(&i->thread_info.soft_volume,
&i->soft_volume))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
continue;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-
i->thread_info.soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
if (!pa_atomic_load(&i->before_ramping_v))<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>+
i->thread_info.soft_volume = i->soft_volume;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>-- <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'>1.5.6.3<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Comic Sans MS"><span lang=EN-US
style='font-size:10.0pt;font-family:"Comic Sans MS"'><o:p> </o:p></span></font></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>Best Regards,
Zheng, Huan(ZBT)<o:p></o:p></span></font></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>OTC/SSD/SSG</span></font><span
lang=EN-US><o:p></o:p></span></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>Intel
Asia-Pacific Research & Developement Ltd</span></font><span lang=EN-US><o:p></o:p></span></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>Tel: 021-6116
6435</span></font><span lang=EN-US><o:p></o:p></span></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>Inet: 8821 6435</span></font><span
lang=EN-US><o:p></o:p></span></p>
<p style='margin:0cm;margin-bottom:.0001pt'><font size=1 face="Comic Sans MS"><span
lang=EN-US style='font-size:7.5pt;font-family:"Comic Sans MS"'>Cub: 3W035</span></font><span
lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal><font size=2 face="Times New Roman"><span lang=EN-US><o:p> </o:p></span></font></p>
</div>
</body>
</html>