Resampler set_rate improvements

Wim Taymans <[email protected]> Thu, 4 Feb 2016 13:17:18 +0100
Newsgroups gmane.comp.audio.compression.speex.devel
Message-ID <CAEza8_4q4Ak_nr5JyEPNddt1vPD3FJp-WnfHt5eSTKPaeQCfjg@mail.gmail.com>
--001a1147127c403b4a052af0b76d
Content-Type: multipart/alternative; boundary=001a1147127c403b46052af0b76b

--001a1147127c403b46052af0b76b
Content-Type: text/plain; charset=UTF-8

Hi,

These patches improve the resampler set_rate function.

The first 2 patches do some cleanups in the GCD calculation and avoid an
overflow when calculating the new phase. This patch could probably be
simplified
if we allowed 64bits operations in speexdsp.

The 3rd patch avoid rounding errors in the phase calculation. The problem
is that the new rate is calculated with the reduced rate, which can cause
large rounding errors and audible artifacts.

Patch 4 demonstrates the effect of patch 3. Compare the resampler output
before and after patch 3.

Patch 5 attempts to strike a balance between accuracy and memory usage by
allowing a small rounding error in the phase.

Let me know what you think,
Wim

--001a1147127c403b46052af0b76b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hi,</div><div><br></div><div>These patches improve th=
e resampler set_rate function.</div><div><br></div><div>The first 2 patches=
 do some cleanups in the GCD calculation and avoid an</div><div>overflow wh=
en calculating the new phase. This patch could probably be simplified</div>=
<div>if we allowed 64bits operations in speexdsp.</div><div><br></div><div>=
The 3rd patch avoid rounding errors in the phase calculation. The problem</=
div><div>is that the new rate is calculated with the reduced rate, which ca=
n cause</div><div>large rounding errors and audible artifacts.</div><div><b=
r></div><div>Patch 4 demonstrates the effect of patch 3. Compare the resamp=
ler output</div><div>before and after patch 3.</div><div><br></div><div>Pat=
ch 5 attempts to strike a balance between accuracy and memory usage by</div=
><div>allowing a small rounding error in the phase.</div><div><br></div><di=
v>Let me know what you think,</div><div>Wim</div><div><br></div></div>

--001a1147127c403b46052af0b76b--
--001a1147127c403b4a052af0b76d
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0001-resample-Improve-GCD-calculation.patch"
Content-Disposition: attachment; 
	filename="0001-resample-Improve-GCD-calculation.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ik887utb0

RnJvbSAwNzJhMzlmZmFkNGJlYTA1YTc0MGQ4NzM0NzgwYzAxZmZlYjk1NTg5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KRGF0
ZTogV2VkLCAzIEZlYiAyMDE2IDE1OjAxOjM1ICswMTAwClN1YmplY3Q6IFtQQVRDSCAxLzVdIHJl
c2FtcGxlOiBJbXByb3ZlIEdDRCBjYWxjdWxhdGlvbgoKVXNlIEV1Y2xpZHMgYWxnb3JpdGhtIHRv
IGNhbGN1bGF0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgdG8Kc2ltcGxpZnkgdGhlIHJl
c2FtcGxlIHJhdGlvIGZyYWN0aW9uIGluc3RlYWQgb2YgdGhlIHNsb3cgaXRlcmF0aXZlCm1ldGhv
ZC4KLS0tCiBsaWJzcGVleGRzcC9yZXNhbXBsZS5jIHwgMjYgKysrKysrKysrKysrKysrKystLS0t
LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL2xpYnNwZWV4ZHNwL3Jlc2FtcGxlLmMgYi9saWJzcGVleGRzcC9yZXNhbXBs
ZS5jCmluZGV4IDRlNDdkNjcuLmU2OWIzMDkgMTAwNjQ0Ci0tLSBhL2xpYnNwZWV4ZHNwL3Jlc2Ft
cGxlLmMKKysrIGIvbGlic3BlZXhkc3AvcmVzYW1wbGUuYwpAQCAtMTA2OCw2ICsxMDY4LDE4IEBA
IEVYUE9SVCB2b2lkIHNwZWV4X3Jlc2FtcGxlcl9nZXRfcmF0ZShTcGVleFJlc2FtcGxlclN0YXRl
ICpzdCwgc3B4X3VpbnQzMl90ICppbl9yCiAgICAqb3V0X3JhdGUgPSBzdC0+b3V0X3JhdGU7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgc3B4X3VpbnQzMl90IF9nY2Qoc3B4X3VpbnQzMl90IGEsIHNweF91
aW50MzJfdCBiKQoreworICAgd2hpbGUgKGIgIT0gMCkKKyAgIHsKKyAgICAgIHNweF91aW50MzJf
dCB0ZW1wID0gYTsKKworICAgICAgYSA9IGI7CisgICAgICBiID0gdGVtcCAlIGI7CisgICB9Cisg
ICByZXR1cm4gYTsKK30KKwogRVhQT1JUIGludCBzcGVleF9yZXNhbXBsZXJfc2V0X3JhdGVfZnJh
YyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3VpbnQzMl90IHJhdGlvX251bSwgc3B4X3Vp
bnQzMl90IHJhdGlvX2Rlbiwgc3B4X3VpbnQzMl90IGluX3JhdGUsIHNweF91aW50MzJfdCBvdXRf
cmF0ZSkKIHsKICAgIHNweF91aW50MzJfdCBmYWN0OwpAQCAtMTA4MSwxNSArMTA5MywxMSBAQCBF
WFBPUlQgaW50IHNwZWV4X3Jlc2FtcGxlcl9zZXRfcmF0ZV9mcmFjKFNwZWV4UmVzYW1wbGVyU3Rh
dGUgKnN0LCBzcHhfdWludDMyX3QgcgogICAgc3QtPm91dF9yYXRlID0gb3V0X3JhdGU7CiAgICBz
dC0+bnVtX3JhdGUgPSByYXRpb19udW07CiAgICBzdC0+ZGVuX3JhdGUgPSByYXRpb19kZW47Ci0g
ICAvKiBGSVhNRTogVGhpcyBpcyB0ZXJyaWJseSBpbmVmZmljaWVudCwgYnV0IHdobyBjYXJlcyAo
YXQgbGVhc3QgZm9yIG5vdyk/ICovCi0gICBmb3IgKGZhY3Q9MjtmYWN0PD1JTUlOKHN0LT5udW1f
cmF0ZSwgc3QtPmRlbl9yYXRlKTtmYWN0KyspCi0gICB7Ci0gICAgICB3aGlsZSAoKHN0LT5udW1f
cmF0ZSAlIGZhY3QgPT0gMCkgJiYgKHN0LT5kZW5fcmF0ZSAlIGZhY3QgPT0gMCkpCi0gICAgICB7
Ci0gICAgICAgICBzdC0+bnVtX3JhdGUgLz0gZmFjdDsKLSAgICAgICAgIHN0LT5kZW5fcmF0ZSAv
PSBmYWN0OwotICAgICAgfQotICAgfQorCisgICBmYWN0ID0gX2djZCAoc3QtPm51bV9yYXRlLCBz
dC0+ZGVuX3JhdGUpOworCisgICBzdC0+bnVtX3JhdGUgLz0gZmFjdDsKKyAgIHN0LT5kZW5fcmF0
ZSAvPSBmYWN0OwogCiAgICBpZiAob2xkX2RlbiA+IDApCiAgICB7Ci0tIAoyLjUuMAoK
--001a1147127c403b4a052af0b76d
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0002-resample-avoid-overflow-in-phase-calculation.patch"
Content-Disposition: attachment; 
	filename="0002-resample-avoid-overflow-in-phase-calculation.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ik887utm1

RnJvbSBjMzUwYTNiZGNhNzRmNmViYWFlOGVhNTMwZDlkMDFjOTE4NGI2NDlkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCA0IEZlYiAyMDE2IDEwOjQ5OjQ5ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzVdIHJl
c2FtcGxlOiBhdm9pZCBvdmVyZmxvdyBpbiBwaGFzZSBjYWxjdWxhdGlvbgoKTWFrZSBzdXJlIHdl
IGRvbid0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHBoYXNlIGZvciB0aGUgbmV3CnNh
bXBsZSByYXRlLgotLS0KIGxpYnNwZWV4ZHNwL3Jlc2FtcGxlLmMgfCAzMiArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDEg
ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9saWJzcGVleGRzcC9yZXNhbXBsZS5jIGIvbGlic3Bl
ZXhkc3AvcmVzYW1wbGUuYwppbmRleCBlNjliMzA5Li4zNzNkNzEzIDEwMDY0NAotLS0gYS9saWJz
cGVleGRzcC9yZXNhbXBsZS5jCisrKyBiL2xpYnNwZWV4ZHNwL3Jlc2FtcGxlLmMKQEAgLTEwODAs
NiArMTA4MCwzNiBAQCBzdGF0aWMgaW5saW5lIHNweF91aW50MzJfdCBfZ2NkKHNweF91aW50MzJf
dCBhLCBzcHhfdWludDMyX3QgYikKICAgIHJldHVybiBhOwogfQogCitzdGF0aWMgc3B4X3VpbnQz
Ml90IF9tdWxkaXYoc3B4X3VpbnQzMl90IGEsIHNweF91aW50MzJfdCBiLCBzcHhfdWludDMyX3Qg
YykKK3sKKyAgIHNweF91aW50MzJfdCBxID0gMCwgciA9IDA7CisgICBzcHhfdWludDMyX3QgcW4g
PSBiIC8gYzsKKyAgIHNweF91aW50MzJfdCBybiA9IGIgJSBjOworCisgICB3aGlsZShhKQorICAg
eworICAgICAgaWYgKGEgJiAxKQorICAgICAgeworICAgICAgICAgcSArPSBxbjsKKyAgICAgICAg
IHIgKz0gcm47CisgICAgICAgICBpZiAociA+PSBjKQorICAgICAgICAgeworICAgICAgICAgICAg
IHErKzsKKyAgICAgICAgICAgICByIC09IGM7CisgICAgICAgICB9CisgICAgICB9CisgICAgICBh
ICA+Pj0gMTsKKyAgICAgIHFuIDw8PSAxOworICAgICAgcm4gPDw9IDE7CisgICAgICBpZiAocm4g
Pj0gYykKKyAgICAgIHsKKyAgICAgICAgIHFuKys7CisgICAgICAgICBybiAtPSBjOworICAgICAg
fQorICAgfQorICAgcmV0dXJuIHE7Cit9CisKIEVYUE9SVCBpbnQgc3BlZXhfcmVzYW1wbGVyX3Nl
dF9yYXRlX2ZyYWMoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCByYXRpb19u
dW0sIHNweF91aW50MzJfdCByYXRpb19kZW4sIHNweF91aW50MzJfdCBpbl9yYXRlLCBzcHhfdWlu
dDMyX3Qgb3V0X3JhdGUpCiB7CiAgICBzcHhfdWludDMyX3QgZmFjdDsKQEAgLTExMDMsNyArMTEz
Myw3IEBAIEVYUE9SVCBpbnQgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlX2ZyYWMoU3BlZXhSZXNh
bXBsZXJTdGF0ZSAqc3QsIHNweF91aW50MzJfdCByCiAgICB7CiAgICAgICBmb3IgKGk9MDtpPHN0
LT5uYl9jaGFubmVscztpKyspCiAgICAgICB7Ci0gICAgICAgICBzdC0+c2FtcF9mcmFjX251bVtp
XT1zdC0+c2FtcF9mcmFjX251bVtpXSpzdC0+ZGVuX3JhdGUvb2xkX2RlbjsKKyAgICAgICAgIHN0
LT5zYW1wX2ZyYWNfbnVtW2ldPSBfbXVsZGl2KHN0LT5zYW1wX2ZyYWNfbnVtW2ldLHN0LT5kZW5f
cmF0ZSxvbGRfZGVuKTsKICAgICAgICAgIC8qIFNhZmV0eSBuZXQgKi8KICAgICAgICAgIGlmIChz
dC0+c2FtcF9mcmFjX251bVtpXSA+PSBzdC0+ZGVuX3JhdGUpCiAgICAgICAgICAgICBzdC0+c2Ft
cF9mcmFjX251bVtpXSA9IHN0LT5kZW5fcmF0ZS0xOwotLSAKMi41LjAKCg==
--001a1147127c403b4a052af0b76d
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0003-resample-avoid-creating-rounding-errors-in-the-phase.patch"
Content-Disposition: attachment; 
	filename="0003-resample-avoid-creating-rounding-errors-in-the-phase.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ik887utp2

RnJvbSAxZDI0NjgwOGQ1YTE2NzViMjNiM2ZlYTc5MGQ0NGQ1ZThkM2E3NDkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCA0IEZlYiAyMDE2IDA5OjEyOjI3ICswMTAwClN1YmplY3Q6IFtQQVRDSCAzLzVdIHJl
c2FtcGxlOiBhdm9pZCBjcmVhdGluZyByb3VuZGluZyBlcnJvcnMgaW4gdGhlIHBoYXNlCgpBbHNv
IHRha2UgdGhlIEdDRCB3aXRoIGFsbCBwaGFzZXMgc28gdGhhdCB3ZSBkb24ndCBpbnRyb2R1Y2Ug
cm91bmRpbmcKZXJyb3JzIGluIHRoZSBwaGFzZS4KLS0tCiBsaWJzcGVleGRzcC9yZXNhbXBsZS5j
IHwgMiArKwogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2xp
YnNwZWV4ZHNwL3Jlc2FtcGxlLmMgYi9saWJzcGVleGRzcC9yZXNhbXBsZS5jCmluZGV4IDM3M2Q3
MTMuLjdjZTQzMDggMTAwNjQ0Ci0tLSBhL2xpYnNwZWV4ZHNwL3Jlc2FtcGxlLmMKKysrIGIvbGli
c3BlZXhkc3AvcmVzYW1wbGUuYwpAQCAtMTEyNSw2ICsxMTI1LDggQEAgRVhQT1JUIGludCBzcGVl
eF9yZXNhbXBsZXJfc2V0X3JhdGVfZnJhYyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4X3Vp
bnQzMl90IHIKICAgIHN0LT5kZW5fcmF0ZSA9IHJhdGlvX2RlbjsKIAogICAgZmFjdCA9IF9nY2Qg
KHN0LT5udW1fcmF0ZSwgc3QtPmRlbl9yYXRlKTsKKyAgIGZvciAoaT0wO2k8c3QtPm5iX2NoYW5u
ZWxzO2krKykKKyAgICAgZmFjdCA9IF9nY2QgKGZhY3QsIHN0LT5zYW1wX2ZyYWNfbnVtW2ldKTsK
IAogICAgc3QtPm51bV9yYXRlIC89IGZhY3Q7CiAgICBzdC0+ZGVuX3JhdGUgLz0gZmFjdDsKLS0g
CjIuNS4wCgo=
--001a1147127c403b4a052af0b76d
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0004-test-add-test-for-dynamic-sample-rate-changes.patch"
Content-Disposition: attachment; 
	filename="0004-test-add-test-for-dynamic-sample-rate-changes.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ik887utv3

RnJvbSAyZmUxNTkzNDZjMDdhYmZkMDZhYWY0MGFjMjUxMTEyZDhjMmEzN2I2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCA0IEZlYiAyMDE2IDA5OjEzOjUzICswMTAwClN1YmplY3Q6IFtQQVRDSCA0LzVdIHRl
c3Q6IGFkZCB0ZXN0IGZvciBkeW5hbWljIHNhbXBsZSByYXRlIGNoYW5nZXMKCkFkZCBhIHRlc3Qg
dGhhdCByZXNhbXBsZXMgYSBzaW5lIHdhdmUgd2l0aCB2YXJ5aW5nIHNhbXBsZXJhdGVzIHRvIGNy
ZWF0ZQphIHN3ZWVwLgotLS0KIGxpYnNwZWV4ZHNwL01ha2VmaWxlLmFtICAgICB8ICA0ICstCiBs
aWJzcGVleGRzcC90ZXN0cmVzYW1wbGUyLmMgfCA5MyArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgOTYgaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnNwZWV4ZHNwL3Rlc3RyZXNhbXBs
ZTIuYwoKZGlmZiAtLWdpdCBhL2xpYnNwZWV4ZHNwL01ha2VmaWxlLmFtIGIvbGlic3BlZXhkc3Av
TWFrZWZpbGUuYW0KaW5kZXggZDA0OTliOS4uYmVkMWNjOCAxMDA2NDQKLS0tIGEvbGlic3BlZXhk
c3AvTWFrZWZpbGUuYW0KKysrIGIvbGlic3BlZXhkc3AvTWFrZWZpbGUuYW0KQEAgLTMyLDcgKzMy
LDcgQEAgbGlic3BlZXhkc3BfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgLXZlcnNpb24taW5m
byBAU1BFRVhEU1BfTFRfQ1VSUkVOVEA6QFNQRUUKIGxpYnNwZWV4ZHNwX2xhX0xJQkFERCA9ICQo
TElCTSkKIAogaWYgQlVJTERfRVhBTVBMRVMKLW5vaW5zdF9QUk9HUkFNUyA9IHRlc3RkZW5vaXNl
IHRlc3RlY2hvIHRlc3RqaXR0ZXIgdGVzdHJlc2FtcGxlCitub2luc3RfUFJPR1JBTVMgPSB0ZXN0
ZGVub2lzZSB0ZXN0ZWNobyB0ZXN0aml0dGVyIHRlc3RyZXNhbXBsZSB0ZXN0cmVzYW1wbGUyCiB0
ZXN0ZGVub2lzZV9TT1VSQ0VTID0gdGVzdGRlbm9pc2UuYwogdGVzdGRlbm9pc2VfTERBREQgPSBs
aWJzcGVleGRzcC5sYSBARkZUX0xJQlNACiB0ZXN0ZWNob19TT1VSQ0VTID0gdGVzdGVjaG8uYwpA
QCAtNDEsNCArNDEsNiBAQCB0ZXN0aml0dGVyX1NPVVJDRVMgPSB0ZXN0aml0dGVyLmMKIHRlc3Rq
aXR0ZXJfTERBREQgPSBsaWJzcGVleGRzcC5sYSBARkZUX0xJQlNACiB0ZXN0cmVzYW1wbGVfU09V
UkNFUyA9IHRlc3RyZXNhbXBsZS5jCiB0ZXN0cmVzYW1wbGVfTERBREQgPSBsaWJzcGVleGRzcC5s
YSBARkZUX0xJQlNAIEBMSUJNQAordGVzdHJlc2FtcGxlMl9TT1VSQ0VTID0gdGVzdHJlc2FtcGxl
Mi5jCit0ZXN0cmVzYW1wbGUyX0xEQUREID0gbGlic3BlZXhkc3AubGEgQEZGVF9MSUJTQCBATElC
TUAKIGVuZGlmCmRpZmYgLS1naXQgYS9saWJzcGVleGRzcC90ZXN0cmVzYW1wbGUyLmMgYi9saWJz
cGVleGRzcC90ZXN0cmVzYW1wbGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOTlhODMwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnNwZWV4ZHNwL3Rlc3RyZXNhbXBsZTIu
YwpAQCAtMCwwICsxLDkzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcgSmVhbi1NYXJjIFZhbGlu
CisKKyAgIEZpbGU6IHRlc3RyZXNhbXBsZTIuYworICAgVGVzdGluZyB0aGUgcmVzYW1wbGluZyBj
b2RlCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorCisgICAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKworICAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAgIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTgorICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKwor
I2luY2x1ZGUgInNwZWV4L3NwZWV4X3Jlc2FtcGxlci5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIFBFUklPRCAz
MgorI2RlZmluZSBJTkJMT0NLIDEwMjQKKyNkZWZpbmUgUkFURSA0ODAwMAorCitpbnQgbWFpbigp
Cit7CisgICBzcHhfdWludDMyX3QgaTsKKyAgIGZsb2F0ICpmaW4sICpmb3V0OworICAgaW50IHJh
dGUgPSAxMDAwLCBvZmYgPSAwLCBhdmFpbCA9IElOQkxPQ0s7CisgICBTcGVleFJlc2FtcGxlclN0
YXRlICpzdCA9IHNwZWV4X3Jlc2FtcGxlcl9pbml0KDEsIFJBVEUsIFJBVEUsIDQsIE5VTEwpOwor
ICAgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlKHN0LCBSQVRFLCByYXRlKTsKKyAgIHNwZWV4X3Jl
c2FtcGxlcl9za2lwX3plcm9zKHN0KTsKKworICAgZmluID0gbWFsbG9jKElOQkxPQ0sqMipzaXpl
b2YoZmxvYXQpKTsKKyAgIGZvciAoaT0wOyBpPElOQkxPQ0sqMjtpKyspCisgICAgIGZpbltpXSA9
IHNpbmYgKChmbG9hdClpL1BFUklPRCAqIDIgKiBNX1BJKSAqIDAuOTsKKworICAgZm91dCA9IG1h
bGxvYyhJTkJMT0NLKjQqc2l6ZW9mKGZsb2F0KSk7CisKKyAgIHdoaWxlICgxKQorICAgeworICAg
ICAgc3B4X3VpbnQzMl90IGluX2xlbjsKKyAgICAgIHNweF91aW50MzJfdCBvdXRfbGVuOworCisg
ICAgICBpbl9sZW4gPSBhdmFpbDsKKyAgICAgIG91dF9sZW4gPSAoaW5fbGVuICogcmF0ZSArIFJB
VEUtMSkgLyBSQVRFOworCisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlZCAlZCAlZCAlZCAtPiAi
LCByYXRlLCBvZmYsIGluX2xlbiwgb3V0X2xlbik7CisKKyAgICAgIHNwZWV4X3Jlc2FtcGxlcl9w
cm9jZXNzX2Zsb2F0KHN0LCAwLCBmaW4gKyBvZmYsICZpbl9sZW4sIGZvdXQsICZvdXRfbGVuKTsK
KworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJWQgJWRcbiIsIGluX2xlbiwgb3V0X2xlbik7Cisg
ICAgICBvZmYgKz0gaW5fbGVuOworICAgICAgYXZhaWwgPSBhdmFpbCAtIGluX2xlbiArIElOQkxP
Q0s7CisKKyAgICAgIGlmIChvZmYgPj0gSU5CTE9DSykKKyAgICAgICAgb2ZmIC09IElOQkxPQ0s7
CisKKyAgICAgIGZ3cml0ZShmb3V0LCBzaXplb2YoZmxvYXQpLCBvdXRfbGVuLCBzdGRvdXQpOwor
CisgICAgICByYXRlICs9IDEwMDsKKyAgICAgIGlmIChyYXRlID4gMTI4MDAwKQorICAgICAgICBi
cmVhazsKKworICAgICAgc3BlZXhfcmVzYW1wbGVyX3NldF9yYXRlKHN0LCBSQVRFLCByYXRlKTsK
KyAgIH0KKyAgIHNwZWV4X3Jlc2FtcGxlcl9kZXN0cm95KHN0KTsKKyAgIGZyZWUoZmluKTsKKyAg
IGZyZWUoZm91dCk7CisgICByZXR1cm4gMDsKK30KKwotLSAKMi41LjAKCg==
--001a1147127c403b4a052af0b76d
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0005-resample-allow-small-errors-in-the-phase.patch"
Content-Disposition: attachment; 
	filename="0005-resample-allow-small-errors-in-the-phase.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ik887uu04

RnJvbSA5NzU1ZGI5ZjljNGU1Y2U5YzljNWY1MjExYTA3NmFkM2Y1MzllYmI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KRGF0
ZTogVGh1LCA0IEZlYiAyMDE2IDExOjE4OjE1ICswMTAwClN1YmplY3Q6IFtQQVRDSCA1LzVdIHJl
c2FtcGxlOiBhbGxvdyBzbWFsbCBlcnJvcnMgaW4gdGhlIHBoYXNlCgpBbGxvdyB1cCB0byAyJSBv
ZiBlcnJvciBpbiB0aGUgcGhhc2UuIFRoaXMgaXMgYSB0cmFkZWZvZmYgYmV0d2VlbgphY2N1cmFj
eSBhbmQgdGhlIGFtb3VudCBvZiBwaGFzZXMgd2UgbmVlZC4KLS0tCiBsaWJzcGVleGRzcC9yZXNh
bXBsZS5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogMSBmaWxl
IGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
bGlic3BlZXhkc3AvcmVzYW1wbGUuYyBiL2xpYnNwZWV4ZHNwL3Jlc2FtcGxlLmMKaW5kZXggN2Nl
NDMwOC4uNGQ0YTIyZCAxMDA2NDQKLS0tIGEvbGlic3BlZXhkc3AvcmVzYW1wbGUuYworKysgYi9s
aWJzcGVleGRzcC9yZXNhbXBsZS5jCkBAIC0xMTI0LDEzICsxMTI0LDcgQEAgRVhQT1JUIGludCBz
cGVleF9yZXNhbXBsZXJfc2V0X3JhdGVfZnJhYyhTcGVleFJlc2FtcGxlclN0YXRlICpzdCwgc3B4
X3VpbnQzMl90IHIKICAgIHN0LT5udW1fcmF0ZSA9IHJhdGlvX251bTsKICAgIHN0LT5kZW5fcmF0
ZSA9IHJhdGlvX2RlbjsKIAotICAgZmFjdCA9IF9nY2QgKHN0LT5udW1fcmF0ZSwgc3QtPmRlbl9y
YXRlKTsKLSAgIGZvciAoaT0wO2k8c3QtPm5iX2NoYW5uZWxzO2krKykKLSAgICAgZmFjdCA9IF9n
Y2QgKGZhY3QsIHN0LT5zYW1wX2ZyYWNfbnVtW2ldKTsKLQotICAgc3QtPm51bV9yYXRlIC89IGZh
Y3Q7Ci0gICBzdC0+ZGVuX3JhdGUgLz0gZmFjdDsKLQorICAgLyogY2FsY3VsYXRlIGV4YWN0IG5l
dyBwaGFzZSAqLwogICAgaWYgKG9sZF9kZW4gPiAwKQogICAgewogICAgICAgZm9yIChpPTA7aTxz
dC0+bmJfY2hhbm5lbHM7aSsrKQpAQCAtMTE0Miw2ICsxMTM2LDM1IEBAIEVYUE9SVCBpbnQgc3Bl
ZXhfcmVzYW1wbGVyX3NldF9yYXRlX2ZyYWMoU3BlZXhSZXNhbXBsZXJTdGF0ZSAqc3QsIHNweF91
aW50MzJfdCByCiAgICAgICB9CiAgICB9CiAKKyAgIGZhY3QgPSBfZ2NkIChzdC0+bnVtX3JhdGUs
IHN0LT5kZW5fcmF0ZSk7CisKKyAgIHdoaWxlIChmYWN0ID4gMSkKKyAgIHsKKyAgICAgIC8qIHJl
ZHVjZSB0aGUgZmFjdG9yIHVudGlsIHdlIGhhdmUgYSBwaGFzZSBlcnJvciBvZiBsZXNzIHRoYW4g
MiUgKi8KKyAgICAgIHNweF91aW50MzJfdCBmID0gMjsKKyAgICAgIGludCBtb3JlID0gMDsKKwor
ICAgICAgZm9yIChpPTA7aTxzdC0+bmJfY2hhbm5lbHMmJiFtb3JlO2krKykKKyAgICAgIHsKKyAg
ICAgICAgIGRvdWJsZSBwaDEgPSAoZG91YmxlKSBzdC0+c2FtcF9mcmFjX251bVtpXSAvIHN0LT5k
ZW5fcmF0ZTsKKyAgICAgICAgIGRvdWJsZSBwaDIgPSAoZG91YmxlKSAoc3QtPnNhbXBfZnJhY19u
dW1baV0gLyBmYWN0KSAvIChzdC0+ZGVuX3JhdGUgLyBmYWN0KTsKKworICAgICAgICAgaWYgKGZh
YnMgKHBoMSAtIHBoMikgPj0gMC4wMikKKyAgICAgICAgICAgIG1vcmUgPSAxOworICAgICAgfQor
ICAgICAgaWYgKCFtb3JlKQorICAgICAgICAgYnJlYWs7CisKKyAgICAgIHdoaWxlIChmYWN0ICUg
ZiAhPSAwKQorICAgICAgICAgZisrOworICAgICAgZmFjdCAvPSBmOworICAgfQorCisgICBmb3Ig
KGk9MDtpPHN0LT5uYl9jaGFubmVscztpKyspCisgICAgIHN0LT5zYW1wX2ZyYWNfbnVtW2ldIC89
IGZhY3Q7CisgICBzdC0+bnVtX3JhdGUgLz0gZmFjdDsKKyAgIHN0LT5kZW5fcmF0ZSAvPSBmYWN0
OworCiAgICBpZiAoc3QtPmluaXRpYWxpc2VkKQogICAgICAgcmV0dXJuIHVwZGF0ZV9maWx0ZXIo
c3QpOwogICAgcmV0dXJuIFJFU0FNUExFUl9FUlJfU1VDQ0VTUzsKLS0gCjIuNS4wCgo=
--001a1147127c403b4a052af0b76d
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Speex-dev mailing list
[email protected]
http://lists.xiph.org/mailman/listinfo/speex-dev

--001a1147127c403b4a052af0b76d--