Евгений Музыченко

Previous Entry Share Next Entry
Как делаются звуковые драйверы в Realtek :)
emuzychenko
Доделал я наконец версию своей старой программки Audio Repeater, гоняющей звуковой поток с устройства на устройство, для использования интерфейса Kernel Streaming. Интерфейс этот самый низкоуровневый, ниже некуда, потому и эффективность предельная. Используется он редко, в основном программы используют MME, DirectSound, DirectShow и WASAPI, некоторые плейеры имеют плагины, чтоб через него проигрывать, а записывать через него умеют только серьезные звуковые редакторы вроде Audition.

Отлаживал, само собой, на хостовой системе - программа чисто прикладная, в систему не лезет, железо не мучает. Во всех режимах прогнал, и под конец, исключительно для порядка, поставил частоту дискретизации 5000. И мгновенно словил BSOD в звуковом драйвере RTKHDAU.sys (Realtek HD Audio). Для надежности попробовал еще раз - опять BSOD в той же точке.

И тут мне вспомнилось, что три года назад, вскорости после очередного апгрейда, когда в компе завелся встроенный звуковой чип AC'97, попытка записи через MME (waveIn) на частотах дискретизации ниже 8000 приводила к таким же крахам в звуковом драйвере Realtek. Тогда я отослал багрепорт в Realtek, приложил пару минидампов, объяснил, как воспроизвести, добавил, что я сам программист, и меня можно связать напрямую с их программистами. В ответ сначала получил что-то вроде "попробуйте переустановить драйвер, а если не поможет, то систему". Разъярился, подробно объяснил, куда идти с такими советами - помогло, подключился какой-то более вменяемый человек, сначала посоветовал добавить параметр в реестр, затем прислал бета-версию нового драйвера. Ничего не изменилось, поддержка отвечать перестала, да и я им писать перестал - поставил драйвер от nVIDIA, у которого были другие глюки, но систему он не валил. В течение года еще пару раз пробовал ставить драйвер Realtek - он продолжал падать, и я возвращал драйвер nVIDIA. Года через два снова попробовал поставить свежий драйвер Realtek - вроде исправили, падать перестал.

Снова написал письмо в поддержку, приложил минидампы, подчеркнул, что проверять надо именно через Kernel Streaming. В ответ заявили, что не могут воспроизвести на своих компьютерах (не иначе, как тупо запускали что-нибудь, пишущее через MME/DirectSound), прислали программу, делающую дамп состояния звукового чипа, попросили прислать им результат.

Вспомнил, что в ноутбуке тоже стоит кодек HD Audio. Поставил на него этот же драйвер, запустил программу - драйвер упал в той же точке. Сделал дампы с обоих чипов, приложил минидампы ошибок, из которых четко видно, что падает каждый раз в одном и том же месте - даже дураку достаточно, чтоб понять, в чем дело.

Сегодня присылают, как и тогда, бету нового драйвера, которая падает точно так же. Сделал минидампы, отправил им.

Одно из двух: либо у них Самый Крутой Программер, делающий эти драйверы, сидит за глухой защитой из народа попроще, который его потревожить лишний раз боится, либо эти драйверы клепает бригада весьма посредственных программеров, исправляющая ошибки интуитивно, методом последовательного, случайного или логического (в применении научного сомневаюсь) тыка. В пользу последнего говорит размер драйвера (4 мегабайта), что раз этак в 50 больше, чем нужно для управления достаточно несложным чипом.

Боюсь, из-за кризиса всю эту бригаду уволят нах, и не дождусь я исправления бага... :)

  • 1
индийские программисты такие программисты..

индийские программисты везде!

[Error: Irreparable invalid markup ('<gram|work>') in entry. Owner must fix manually. Raw contents below.]

индийские программисты везде!

<blockquote><gram|work> про индийский код
<gram|work> Какой самый извращенный способ проверить в условии if () булевскую переменную ?
<gram|work> bool b;
<gram|work> b = false;
<gram|work> if (b == true){...}
<gram|work> Это децкий лепет
<gram|work> ИТАК, ПЕРВОЕ МЕСТО
<gram|work> Знакомый говорит что нашел только что в коде:
<gram|work> if (b.ToString().length < 5){...}</blockquote>

  • 1
?

Log in

No account? Create an account