HTC DriverGate – wersja audio

Ikona czasu czytania 4 minuta. czytać


Czytelnicy pomagają wspierać MSpoweruser. Możemy otrzymać prowizję, jeśli dokonasz zakupu za pośrednictwem naszych linków. Ikona podpowiedzi

Przeczytaj naszą stronę z informacjami, aby dowiedzieć się, jak możesz pomóc MSPoweruser w utrzymaniu zespołu redakcyjnego Czytaj więcej

brama kierowcy

Cóż, po dniu lub dwóch, gdy Windows Mobile działa dobrze, wracamy do niektórych problemów, które niepotrzebnie nękają nasze urządzenia.

Wygląda na to, że sterownik po raz kolejny wpływa na wybrane urządzenia HTC, w tym na wszystkie urządzenia obecnej generacji, takie jak HTC Touch Diamond, Touch Pro, HD i Xperia. Gdy dźwięk jest okresowo odtwarzany przez słuchawki lub głośniki (zwykle raz na 5 minut), usłyszysz krótkie „przeskoki” w dźwięku. Dźwięk został opisany jako lag/skip/hiccup/tick/blip. Wydaje się, że problem tkwi głęboko w sterowniku urządzenia wave lub być może w samym urządzeniu wave (Qualcomm znowu w akcji?). Wydaje się, że problem nie występuje w A2DP.

Problem dotyczy głównie graczy zewnętrznych, ponieważ wydaje się, że HTC rozwiązał problem, ale tylko dla siebie, budując niestandardowy sterownik fal.

Zespół Conduits Pocket Player badał ten problem i wrócił zniechęcony. Oto, co mieli do powiedzenia na ten temat.

Przeprowadziliśmy szeroko zakrojone testy dotyczące problemu pomijania dźwięku HTC i doszliśmy do wniosku, że nie jest to coś, czym Conduits może się zająć. Po przeanalizowaniu programu HTC Audio Manager i kilku innych plików (takich jak HTC DirectShow Audio Renderer HTCRenderFlt2.dll i HTCADXRenderer4.dll) stwierdziliśmy, że oba wykonują bardzo specjalne wywołania systemowe w sterowniku WaveOut.

Oto kilka szczegółów technicznych tego, co znaleźliśmy. Po pierwsze, nie sądzimy, aby priorytet wątku lub procesu miał cokolwiek wspólnego z problemem. Normalna aplikacja audio wykorzystuje cykl „buforów waveOut”, które utrzymują wyjście audio „pełne” danymi audio, z których system może pobierać i odtwarzać. Aplikacje używają standardowych funkcji waveOutWrite do wypełniania tych buforów. Z punktu widzenia Pocket Player bufory te są zawsze pełne i zmiana priorytetów nie ma na to wpływu. Jednym ze sposobów poprawy przeskoków audio (które miały wpływ na HTC TyTN) było zwiększenie priorytetu wątków sterownika WaveOut poprzez edycję wartości rejestru w HKLM\Drivers\Builtin\WaveOut. Tutaj to podejście nie zadziałało. Co ciekawe, te problemy z przeskakiwaniem występują na komputerach stacjonarnych. Tam problem dotyczy sterowników czasu rzeczywistego, których przetwarzanie trwa „zbyt długo”, co uniemożliwia sterownikowi audio przetworzenie następnej partii dźwięku. Dzieje się tak w systemie Vista z niektórymi sterownikami MacBooka.

Menedżer audio wykorzystuje inny mechanizm wyjściowy niż standardowe wywołania waveOut — wykorzystuje filtr renderowania dźwięku DirectShow, który jest kolejnym sposobem przesyłania dźwięku. Patrząc wewnętrznie, jak to działa, używa zupełnie innego mechanizmu. Wykorzystuje zastrzeżone wywołanie waveOutMessage do otwarcia nowej kolejki wiadomości, przez którą dźwięk jest następnie „przesyłany strumieniowo”.

Pocket Player (i inne aplikacje) mogłyby prawdopodobnie rozwiązać ten problem, używając HTC Audio Renderer zamiast własnych procedur waveOut, ale wtedy stracilibyśmy przenikanie i inne funkcje charakterystyczne dla Pocket Player. Przeprowadziliśmy kilka wstępnych testów tworzenia wykresu filtra DirectShow (wraz z ich modułem renderowania dźwięku), ale nadal doświadczaliśmy przeskakiwania, więc muszą być dodatkowe kroki.

W rezultacie Conduits traktuje to teraz jako problem specyficzny dla urządzenia, który producent jest zobowiązany naprawić. Alternatywnie, jeśli HTC chce udokumentować swój specjalny „tryb przesyłania strumieniowego” dla swojego sterownika wyjścia audio, możemy rozważyć dostosowanie się do tego modelu.

Jeśli wyodrębnisz plik Wavedev.dll z pamięci ROM, zobaczysz niezliczone komunikaty dotyczące debugowania dotyczące „strumieni MP3” i tym podobnych, wskazujące na całkowicie oddzielną ścieżkę audio dla muzyki pochodzącej z ich oprogramowania. Jeśli zajdzie taka potrzeba, przepiszemy naszą wtyczkę wyjściową WaveOut (nasze procedury wyjściowe wykorzystują prywatną architekturę wtyczek, podobnie jak nasze inne typy wtyczek), która wykorzystuje wyjście DirectShow.

HTC odmówiło udokumentowania sposobu rozwiązania problemu, twierdząc, że nie obsługuje oprogramowania innych firm.

Oczywiście programiści XDA nigdy nie pozwolą, by taka sytuacja kłamała. Thx1200 rozpoczyna nagrodę dla programistów, którzy mogą stworzyć rozwiązanie tego problemu typu open source i udostępnić je społeczności. Obecnie nagroda wynosi tylko niewielkie 30 USD, ale jestem pewien, że możemy wygenerować znacznie więcej darowizn, aby rozwiązać ten irytujący problem dla każdego, kto korzysta z oprogramowania audio innej firmy.

Przeczytaj cały wątek na XDA-Developers tutaj, i nie zapomnij dodać swojego zobowiązania, jeśli w ogóle czujesz, że jest to sytuacja, która wymaga poprawy.

Więcej na tematy: sterowniki audio, HTC