Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Sep 2001 11:41:16 +0400
From:      Maxim Sobolev <sobomax@mail.ru>
To:        cg@FreeBSD.org
Cc:        multimedia@FreeBSD.org, current@FreeBSD.org
Subject:   Making DMA buffer resizeable depending on audio speed/format
Message-ID:  <E15iA4g-0007aK-00@smtp6.port.ru>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

--192.168.1.100.0.526.1000539647.245.19907
Content-Type: text/plain

Hi there,

I want to get your comments on the attached patch, which makes sound
driver resizing its DMA buffer according to the currently selected
audio speed/format. This is necessary because most audio hardware
supports wide range of speeds/formats, which makes it hard to define
one buffer size that will satisfy all supported formats and providing
minimal latency for the formats with low datarates, while good skip
protection for formats with high datarates. For example 4096 bytes used
now in most drivers doesn't protect data playing on 44kHz from skipping
when there is some kernel activity going on (for example output on
console or switching between consoles), while at the same time this
size means 0.5s latency for games that use 8kHz/8 bit audio formats,
which is a quite noticeable delay.

Attached patch fixes some maximal buffer size, which is necessary
for proper registering with the DMA subsystem, while scales this
buffer down when format with lower datarate is selected. I'm running
this patch for a month on my -current system with OPL3-SA hardware
and so far it works like a charm - mpg123 no longer skips when I'm
scrolling in the editor running on console, while audio delay in
digger (22kHz, 8 bit, mono) is absolutely unnoticeable.

This patch only improves mss driver, but it should be relatively
easy to modify other drivers as well (I do not have a hardware to
test changes on).

Thank you in advance!

-Maxim


--192.168.1.100.0.526.1000539647.245.19907
Content-Type: application/octet-stream;
    name="pcm.diff"
Content-Transfer-Encoding: base64

PyBpc2EvbXNzLmMsdgo/IHBjbS9idWZmZXIuYyx2Cj8gcGNtL3NvdW5kLmMsdgpJbmRleDogaXNh
L21zcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9kZXYvc291bmQv
aXNhL21zcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcxCmRpZmYgLWQgLXUgLXIxLjcxIG1z
cy5jCi0tLSBpc2EvbXNzLmMJMjAwMS8wOC8yMyAxMTozMDo1MAkxLjcxCisrKyBpc2EvbXNzLmMJ
MjAwMS8wOS8xNSAwNDozMDozOQpAQCAtMzcsNyArMzcsOSBAQAogCiAjaW5jbHVkZSAibWl4ZXJf
aWYuaCIKIAotI2RlZmluZSBNU1NfQlVGRlNJWkUgKDQwOTYpCisjZGVmaW5lIE1TU19NQVhEQVRB
UkFURSAoNDgwMDAgKiAyICogMikJLyogNDhrSHosIDE2Yml0LCBzdGVyZW8gKi8KKyNkZWZpbmUg
TVNTX01BWEJVRkZTSVpFICgxNjM4NCkKKyNkZWZpbmUgTVNTX01JTkJVRkZTSVpFICgxMDI0KQog
I2RlZmluZQlhYnMoeCkJKCgoeCkgPCAwKSA/IC0oeCkgOiAoeCkpCiAjZGVmaW5lIE1TU19JTkRF
WEVEX1JFR1MgMHgyMAogI2RlZmluZSBPUExfSU5ERVhFRF9SRUdTIDB4MTkKQEAgLTkyLDYgKzk0
LDcgQEAKIHN0YXRpYyBpbnQJCW9wdGlfZGV0ZWN0KGRldmljZV90IGRldiwgc3RydWN0IG1zc19p
bmZvICptc3MpOwogc3RhdGljIGNoYXIgCQkqeW1mX3Rlc3QoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qg
bXNzX2luZm8gKm1zcyk7CiBzdGF0aWMgdm9pZAkJYWRfdW5tdXRlKHN0cnVjdCBtc3NfaW5mbyAq
bXNzKTsKK3N0YXRpYyB2b2lkCQltc3NfYWRqdXN0YnVmKHN0cnVjdCBtc3NfY2hpbmZvICpjaCwg
aW50IHNwZWVkLCB1X2ludDMyX3QgZm9ybWF0KTsKIAogLyogbWl4ZXIgc2V0IGZ1bmNzICovCiBz
dGF0aWMgaW50IAkJbXNzX21peGVyX3NldChzdHJ1Y3QgbXNzX2luZm8gKm1zcywgaW50IGRldiwg
aW50IGxlZnQsIGludCByaWdodCk7CkBAIC0zMjgsMTIgKzMzMSwxMiBAQAogCWlmIChvaykgewog
CQlwZG1hID0gcm1hbl9nZXRfc3RhcnQobXNzLT5kcnExKTsKIAkJaXNhX2RtYV9hY3F1aXJlKHBk
bWEpOwotCQlpc2FfZG1haW5pdChwZG1hLCBNU1NfQlVGRlNJWkUpOworCQlpc2FfZG1haW5pdChw
ZG1hLCBNU1NfTUFYQlVGRlNJWkUpOwogCQltc3MtPmJkX2ZsYWdzICY9IH5CRF9GX0RVUExFWDsK
IAkJaWYgKG1zcy0+ZHJxMikgewogCQkJcmRtYSA9IHJtYW5fZ2V0X3N0YXJ0KG1zcy0+ZHJxMik7
CiAJCQlpc2FfZG1hX2FjcXVpcmUocmRtYSk7Ci0JCQlpc2FfZG1haW5pdChyZG1hLCBNU1NfQlVG
RlNJWkUpOworCQkJaXNhX2RtYWluaXQocmRtYSwgTVNTX01BWEJVRkZTSVpFKTsKIAkJCW1zcy0+
YmRfZmxhZ3MgfD0gQkRfRl9EVVBMRVg7CiAJCX0gZWxzZSBtc3MtPmRycTIgPSBtc3MtPmRycTE7
CiAJfQpAQCAtOTI1LDYgKzkyOCwzMiBAQAogICAgIAl3YWl0X2Zvcl9jYWxpYnJhdGlvbihtc3Mp
OwogfQogCisvKgorICogUmVzaXplIHRoZSBETUEgYnVmZmVyLCBzbyB0aGF0IGFtb3VudCBvZiBk
YXRhIGl0IGhvbGRzIGlzIHN1Y2ggdGhhdCB0aGUgdGltZQorICogdG8gcGxheSB0aGF0IGRhdGEg
cmVtYWlucyBhcHByb3hpbWF0ZWx5IGNvbnN0YW50LgorICovCitzdGF0aWMgdm9pZAorbXNzX2Fk
anVzdGJ1ZihzdHJ1Y3QgbXNzX2NoaW5mbyAqY2gsIGludCBzcGVlZCwgdV9pbnQzMl90IGZvcm1h
dCkKK3sKKwlpbnQgbmV3c2l6ZSwgcmF0ZTsKKworCXJhdGUgPSBzbmRidWZfZGF0YXJhdGUoc3Bl
ZWQsIGZvcm1hdCk7CisJaWYgKHJhdGUgPT0gLTEpIHsKKwkJLyogU2hvdWxkIG5ldmVyIGhhcHBl
biAqLworCQlwcmludGYoIm1zczogdW5yZWNvZ25pc2VkIGF1ZGlvIGZvcm1hdDogJXVcbiIsIGZv
cm1hdCk7CisJCXJldHVybjsKKwl9CisJbmV3c2l6ZSA9IChyYXRlICogKE1TU19NQVhCVUZGU0la
RSAvIDEwMjQpIC8gTVNTX01BWERBVEFSQVRFKSAqIDEwMjQ7CisJaWYgKG5ld3NpemUgPCBNU1Nf
TUlOQlVGRlNJWkUpCisJCW5ld3NpemUgPSBNU1NfTUlOQlVGRlNJWkU7CisJZWxzZSBpZiAobmV3
c2l6ZSA+IE1TU19NQVhCVUZGU0laRSkgeworCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJ
CXByaW50ZigibXNzOiBib2d1cyBNU1NfTUFYQlVGRlNJWkUsIHBlcmhhcHMgZXJyb3IgaW4gdGhl
IGRyaXZlclxuIik7CisJCW5ld3NpemUgPSBNU1NfTUFYQlVGRlNJWkU7CisJfQorCXNuZGJ1Zl9y
ZXNpemUoY2gtPmJ1ZmZlciwgMiwgbmV3c2l6ZSAvIDIpOworfQorCiBzdGF0aWMgaW50CiBtc3Nf
c3BlZWQoc3RydWN0IG1zc19jaGluZm8gKmNoLCBpbnQgc3BlZWQpCiB7CkBAIC05NjAsNiArOTg5
LDcgQEAKICAgICAgICAgCXNwZWVkID0gc3BlZWRzW3NlbF07CiAgICAgICAgIAlhZF93cml0ZSht
c3MsIDgsIChhZF9yZWFkKG1zcywgOCkgJiAweGYwKSB8IHNlbCk7CiAgICAgCX0KKyAgICAJbXNz
X2FkanVzdGJ1ZihjaCwgc3BlZWQsIGNoLT5jaGFubmVsLT5mb3JtYXQpOwogICAgIAlhZF9sZWF2
ZV9NQ0UobXNzKTsKIAogICAgIAlyZXR1cm4gc3BlZWQ7CkBAIC05OTksNiArMTAyOSw3IEBACiAg
ICAgCWFkX2VudGVyX01DRShtc3MpOwogICAgIAlhZF93cml0ZShtc3MsIDgsIChhZF9yZWFkKG1z
cywgOCkgJiAweDBmKSB8IGFyZyk7CiAgICAgCWlmIChGVUxMX0RVUExFWChtc3MpKSBhZF93cml0
ZShtc3MsIDI4LCBhcmcpOyAvKiBjYXB0dXJlIG1vZGUgKi8KKyAgICAJbXNzX2FkanVzdGJ1Zihj
aCwgY2gtPmNoYW5uZWwtPnNwZWVkLCBmb3JtYXQpOwogICAgIAlhZF9sZWF2ZV9NQ0UobXNzKTsK
ICAgICAJcmV0dXJuIGZvcm1hdDsKIH0KQEAgLTExMjAsNyArMTE1MSw4IEBACiAJY2gtPmNoYW5u
ZWwgPSBjOwogCWNoLT5idWZmZXIgPSBiOwogCWNoLT5kaXIgPSBkaXI7Ci0JaWYgKHNuZGJ1Zl9h
bGxvYyhjaC0+YnVmZmVyLCBtc3MtPnBhcmVudF9kbWF0LCBNU1NfQlVGRlNJWkUpID09IC0xKSBy
ZXR1cm4gTlVMTDsKKwlpZiAoc25kYnVmX2FsbG9jKGNoLT5idWZmZXIsIG1zcy0+cGFyZW50X2Rt
YXQsIE1TU19NQVhCVUZGU0laRSkgPT0gLTEpCisJCXJldHVybiBOVUxMOwogCXNuZGJ1Zl9pc2Fk
bWFzZXR1cChjaC0+YnVmZmVyLCAoZGlyID09IFBDTURJUl9QTEFZKT8gbXNzLT5kcnExIDogbXNz
LT5kcnEyKTsKIAlyZXR1cm4gY2g7CiB9CkBAIC0xNzA4LDcgKzE3NDAsNyBAQAogCQkJLypsb3dh
ZGRyKi9CVVNfU1BBQ0VfTUFYQUREUl8yNEJJVCwKIAkJCS8qaGlnaGFkZHIqL0JVU19TUEFDRV9N
QVhBRERSLAogCQkJLypmaWx0ZXIqL05VTEwsIC8qZmlsdGVyYXJnKi9OVUxMLAotCQkJLyptYXhz
aXplKi9NU1NfQlVGRlNJWkUsIC8qbnNlZ21lbnRzKi8xLAorCQkJLyptYXhzaXplKi9NU1NfTUFY
QlVGRlNJWkUsIC8qbnNlZ21lbnRzKi8xLAogCQkJLyptYXhzZWd6Ki8weDNmZmZmLAogCQkJLypm
bGFncyovMCwgJm1zcy0+cGFyZW50X2RtYXQpICE9IDApIHsKIAkJZGV2aWNlX3ByaW50ZihkZXYs
ICJ1bmFibGUgdG8gY3JlYXRlIGRtYSB0YWdcbiIpOwpAQCAtMjIwOCw1ICsyMjQwLDMgQEAKIERS
SVZFUl9NT0RVTEUoc25kX2d1c3BjbSwgZ3VzYywgZ3VzcGNtX2RyaXZlciwgcGNtX2RldmNsYXNz
LCAwLCAwKTsKIE1PRFVMRV9ERVBFTkQoc25kX2d1c3BjbSwgc25kX3BjbSwgUENNX01JTlZFUiwg
UENNX1BSRUZWRVIsIFBDTV9NQVhWRVIpOwogTU9EVUxFX1ZFUlNJT04oc25kX2d1c3BjbSwgMSk7
Ci0KLQpJbmRleDogcGNtL2J1ZmZlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMv
c3JjL3N5cy9kZXYvc291bmQvcGNtL2J1ZmZlci5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcK
ZGlmZiAtZCAtdSAtcjEuNyBidWZmZXIuYwotLS0gcGNtL2J1ZmZlci5jCTIwMDEvMDgvMjMgMTE6
MzA6NTIJMS43CisrKyBwY20vYnVmZmVyLmMJMjAwMS8wOS8xNSAwNDozMDozOQpAQCAtNjQ2LDMg
KzY0NiwzMCBAQAogCS8qIHRlbGwgaXNhX2RtYSB0byBib3VuY2UgZGF0YSBpbi9vdXQgKi8KIH0K
IAorLyoKKyAqIEdpdmVuIGEgc3BlZWQgYW5kIGF1ZGlvIGVuY29kaW5nIGZvcm1hdCBjYWxjdWxh
dGUgYW5kIHJldHVybiBkYXRhIHJhdGUgb2YKKyAqIGF1ZGlvIHN0cmVhbSwgaS5lLiBudW1iZXIg
b2YgYnl0ZXMgcmVxdWlyZWQgdG8gaG9sZCAxIHNlY29uZCBvZiBhdWRpbyBkYXRhLgorICogUmV0
dXJuIC0xIGlmIHN1cHBsaWVkIGZvcm1hdCBpcyBpbmNvcnJlY3QgKGkuZS4gZG9lc24ndCBjb250
YWluIGFueSBvZgorICogcmVjb2duaXNlYWJsZSBBRk1UXyogdmFsdWVzLgorICovCitpbnQKK3Nu
ZGJ1Zl9kYXRhcmF0ZShpbnQgc3BlZWQsIHVfaW50MzJfdCBmbXQpCit7CisJaW50IGksIGo7CisJ
LyogVXNlIHN0YXRpYyBhcnJheXMgdG8gYXZvaWQgdXNpbmcgdmFsdWFibGUga2VybmVsJ3Mgc3Rh
Y2sgKi8KKwlzdGF0aWMgdV9pbnQzMl90IGY0W10gICA9IHs0LCAgQUZNVF9JTUFfQURQQ00sIDB9
OworCXN0YXRpYyB1X2ludDMyX3QgZjhbXSAgID0gezgsICBBRk1UX01VX0xBVywgQUZNVF9BX0xB
VywgQUZNVF9VOCwKKwkJCQkgICAgICAgQUZNVF9TOCwgMH07CisJc3RhdGljIHVfaW50MzJfdCBm
MTZbXSAgPSB7MTYsIEFGTVRfUzE2X0xFLCBBRk1UX1MxNl9CRSwgQUZNVF9VMTZfTEUsCisJCQkJ
ICAgICAgIEFGTVRfVTE2X0JFLCAwfTsKKwlzdGF0aWMgdV9pbnQzMl90IGYzMltdICA9IHszMiwg
QUZNVF9TMzJfTEUsIEFGTVRfUzMyX0JFLCBBRk1UX1UzMl9MRSwKKwkJCQkgICAgICAgQUZNVF9V
MzJfQkUsIDB9OworCXN0YXRpYyB1X2ludDMyX3QgKmZtdHNbXSA9IHtmNCwgZjgsIGYxNiwgZjMy
LCBOVUxMfTsKKworCWZvciAoaSA9IDA7IGZtdHNbaV0gIT0gTlVMTDsgaSsrKQorCQlmb3IgKGog
PSAxOyAqKGZtdHNbaV0gKyBqKSAhPSAwOyBqKyspCisJCQlpZiAoKGZtdCAmICooZm10c1tpXSAr
IGopKSAhPSAwKQorCQkJCXJldHVybiAoKGZtdCAmIEFGTVRfU1RFUkVPID8gMiA6IDEgKSAqCisJ
CQkJCSgqZm10c1tpXSkgKiBzcGVlZCkgLyA4OworCXJldHVybiAtMTsKK30KSW5kZXg6IHBjbS9i
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMvZGV2L3NvdW5k
L3BjbS9idWZmZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLWQgLXUgLXIxLjMg
YnVmZmVyLmgKLS0tIHBjbS9idWZmZXIuaAkyMDAxLzA1LzI3IDE0OjM5OjM0CTEuMworKysgcGNt
L2J1ZmZlci5oCTIwMDEvMDkvMTUgMDQ6MzA6MzkKQEAgLTkzLDQgKzkzLDQgQEAKIGludCBzbmRi
dWZfaXNhZG1hcHRyKHN0cnVjdCBzbmRfZGJ1ZiAqYik7CiB2b2lkIHNuZGJ1Zl9pc2FkbWFib3Vu
Y2Uoc3RydWN0IHNuZF9kYnVmICpiKTsKIAotCitpbnQgc25kYnVmX2RhdGFyYXRlKGludCwgdV9p
bnQzMl90KTsK

--192.168.1.100.0.526.1000539647.245.19907--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-multimedia" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E15iA4g-0007aK-00>