HTC DriverGate – аудіоверсія

Значок часу читання 4 хв. читати


Читачі допомагають підтримувати MSpoweruser. Ми можемо отримати комісію, якщо ви купуєте через наші посилання. Значок підказки

Прочитайте нашу сторінку розкриття інформації, щоб дізнатися, як ви можете допомогти MSPoweruser підтримувати редакційну команду Читати далі

drivergate

Що ж, після того, як Windows Mobile почувається добре через день-два, ми повертаємося до деяких проблем, які непотрібно мучать наші пристрої.

Схоже, драйвери знову впливають на вибрані пристрої HTC, включаючи всі пристрої високого класу поточного покоління, такі як HTC Touch Diamond, Touch Pro, HD і Xperia. Коли звук періодично відтворюється через навушники або динаміки (зазвичай кожні 5 хвилин), ви почуєте короткий «пропуск» у аудіо. Звук описується як затримка/пропуск/гикавка/тикання/блискання. Здається, проблема криється глибоко в драйвері хвильового пристрою або, можливо, в самому апаратному хвильовому пристрої (Qualcomm знову в дії?) Здається, проблема не присутня в A2DP.

Проблема в основному стосується сторонніх гравців, оскільки компанія HTC, схоже, вирішила проблему, але лише для себе, створивши спеціальний хвильовий драйвер.

Команда Conduits Pocket Player вивчала цю проблему та повернулася збентежена. Це те, що вони мали сказати на цю тему.

Ми провели широкі тести щодо проблеми пропуску аудіо HTC і дійшли висновку, що це не те, що Conduits може вирішити. Проаналізувавши програму HTC Audio Manager і кілька інших файлів (таких як HTC DirectShow Audio Renderer HTCRenderFlt2.dll і HTCADXRenderer4.dll), ми виявили, що обидва вони здійснюють деякі дуже особливі системні виклики драйвера WaveOut.

Ось деякі технічні деталі того, що ми знайшли. По-перше, ми не вважаємо, що пріоритети потоку чи процесу мають якесь відношення до проблеми. Звичайні аудіопрограми використовують цикл «буферів WaveOut»™, які зберігають аудіовихід «заповненим» аудіоданими, з яких система отримує та відтворює. Програми використовують стандартні функції waveOutWrite для заповнення цих буферів. З точки зору Pocket Player, ці буфери завжди заповнені, і налаштування пріоритетів не вплине на це. Одним із способів покращити пропуски аудіо (що вплинуло на HTC TyTN) було підвищити пріоритет потоку драйвера WaveOut шляхом редагування значення реєстру в HKLM\Drivers\Builtin\WaveOut. Тут такий підхід не спрацював. Цікаво, що ці проблеми з пропуском виникають на настільних ПК. Тут проблема пов’язана з драйверами реального часу, які «занадто довго» обробляються, що не дозволяє аудіодрайверу обробити наступну партію звуку. Це трапляється у Vista з деякими драйверами MacBook.

Аудіоменеджер використовує механізм виведення, відмінний від стандартних викликів waveOut – він використовує фільтр рендеринга аудіо DirectShow, який є іншим способом надсилання аудіо. Дивлячись на те, як він працює всередині, він використовує зовсім інший механізм. Він використовує власний виклик waveOutMessage, щоб відкрити нову чергу повідомлень, через яку аудіо «потікає».

Pocket Player (та інші програми) могли б вирішити цю проблему, використовуючи HTC Audio Renderer замість їхніх власних процедур WaveOut, але тоді ми втратили б перехресне затухання та інші функції, властиві Pocket Player. Ми провели кілька початкових тестів створення графіка фільтра DirectShow (у комплекті з їхнім аудіорендерером), але все одно відчули пропуски, тому повинні бути додаткові кроки.

У результаті Conduits тепер розглядає це як проблему, пов’язану з пристроєм, яку виробник зобов’язаний виправити. Крім того, якщо HTC хоче задокументувати свій спеціальний «режим потокової передачі» для свого драйвера аудіовиходу, ми можемо розглянути можливість адаптації до цієї моделі.

Якщо ви видобудете Wavedev.dll із ПЗУ, ви побачите незліченну кількість повідомлень про налагодження щодо «потоків MP3» тощо, що вказує на абсолютно окремий аудіошлях для музики, що надходить із їх програмного забезпечення. За потреби ми перепишемо наш вихідний модуль WaveOut (наші підпрограми виведення використовують приватну архітектуру плагінів, як і інші типи плагінів), який використовує вихід DirectShow.

HTC відмовився документувати, як вони вирішили цю проблему, заявивши, що вони не підтримують стороннє програмне забезпечення.

Звичайно, XDA-розробники ніколи не допускають такої ситуації. Thx1200 розпочинає винагороду для розробників, які можуть створити рішення з відкритим вихідним кодом для цієї проблеми та зробити його доступним для спільноти. Наразі винагорода становить лише невеликі 30 доларів США, але я впевнений, що ми можемо зібрати набагато більше пожертв, щоб вирішити цю неприємну проблему для тих, хто використовує аудіопрограми сторонніх розробників.

Прочитайте повну тему на XDA-Developers тут, і не забудьте також додати свою обіцянку, якщо ви взагалі вважаєте, що це ситуація, яку потрібно виправити.

Детальніше про теми: аудіо драйвери, HTC