HTC DriverGate – die Audio-Version

Symbol für die Lesezeit 4 Minute. lesen


Leser unterstützen MSpoweruser. Wir erhalten möglicherweise eine Provision, wenn Sie über unsere Links kaufen. Tooltip-Symbol

Lesen Sie unsere Offenlegungsseite, um herauszufinden, wie Sie MSPoweruser dabei helfen können, das Redaktionsteam zu unterstützen Lesen Sie weiter

Fahrertor

Nun, nachdem wir uns ein oder zwei Tage mit Windows Mobile wohl gefühlt haben, kehren wir zu einigen Problemen zurück, die unsere Geräte unnötigerweise plagen.

Es scheint, dass Treiber erneut ausgewählte HTC-Geräte betreffen, einschließlich aller High-End-Geräte der aktuellen Generation wie HTC Touch Diamond, Touch Pro, HD und Xperia. Wenn der Ton regelmäßig entweder über Kopfhörer oder Lautsprecher wiedergegeben wird (normalerweise einmal alle 5 Minuten), hören Sie einen kurzen „Sprung“ im Ton. Das Geräusch wurde als Lag/Skip/Schluckauf/Tick/Blip beschrieben. Das Problem scheint tief im Wave-Gerätetreiber oder möglicherweise im Hardware-Wave-Gerät selbst zu liegen (Qualcomm wieder in Aktion?) Das Problem scheint bei A2DP nicht vorhanden zu sein.

Das Problem betrifft hauptsächlich Spieler von Drittanbietern, da HTC das Problem anscheinend gelöst hat, aber nur für sich selbst, indem es einen benutzerdefinierten Wave-Treiber erstellt hat.

Das Team von Conduits Pocket Player hat sich mit dem Problem befasst und ist entmutigt zurückgekehrt. Dies ist, was sie zu diesem Thema zu sagen hatten.

Wir haben umfangreiche Tests in Bezug auf das HTC-Audio-Skipping-Problem durchgeführt und sind zu dem Schluss gekommen, dass Conduits dies nicht beheben kann. Nach der Analyse des HTC Audio Manager-Programms und einiger anderer Dateien (wie HTCs DirectShow Audio Renderer HTCRenderFlt2.dll und HTCADXRenderer4.dll) stellten wir fest, dass beide einige sehr spezielle Systemaufrufe an den WaveOut-Treiber vornehmen.

Hier sind einige technische Details zu dem, was wir gefunden haben. Erstens glauben wir nicht, dass die Thread- oder Prozesspriorität irgendetwas mit dem Problem zu tun hat. Normale Audioanwendungen verwenden einen Zyklus von „WaveOut-Puffer“, die den Audioausgang „voll“ mit Audiodaten halten, die das System abrufen und abspielen kann. Anwendungen verwenden standardmäßige waveOutWrite-Funktionen, um diese Puffer zu füllen. Aus der Sicht von Pocket Player sind diese Puffer immer voll, und das Anpassen der Prioritäten wird dies nicht beeinflussen. Eine Möglichkeit, Audiosprünge zu verbessern (die das HTC TyTN betraf), bestand darin, die Thread-Priorität des WaveOut-Treibers zu erhöhen, indem ein Registrierungswert unter HKLM\Drivers\Builtin\WaveOut bearbeitet wurde. Dieser Ansatz hat hier nicht funktioniert. Interessanterweise treten diese Probleme beim Überspringen auf Desktop-PCs auf. Dort hängt das Problem mit Echtzeittreibern zusammen, deren Verarbeitung "zu lange" dauert, was den Audiotreiber daran hindert, den nächsten Tonstapel zu verarbeiten. Dies passiert in Vista mit einigen MacBook-Treibern.

Der Audio-Manager verwendet einen anderen Ausgabemechanismus als die standardmäßigen waveOut-Aufrufe – er verwendet den DirectShow-Audio-Renderer-Filter, der eine weitere Möglichkeit zum Senden von Audio darstellt. Wenn man sich die Interna ansieht, wie es funktioniert, verwendet es einen völlig anderen Mechanismus. Es verwendet einen proprietären waveOutMessage-Aufruf, um eine neue Nachrichtenwarteschlange zu öffnen, durch die das Audio dann „gestreamt“ wird.

Pocket Player (und andere Anwendungen) könnten dieses Problem möglicherweise lösen, indem sie den HTC Audio Renderer anstelle ihrer eigenen waveOut-Routinen verwenden, aber dann würden wir Überblendungen und andere Pocket Player-spezifische Funktionen verlieren. Wir haben einige anfängliche Tests zum Erstellen eines DirectShow-Filterdiagramms (komplett mit ihrem Audio-Renderer) durchgeführt, aber immer noch das Überspringen erlebt, sodass zusätzliche Schritte erforderlich sind.

Infolgedessen betrachtet Conduits dies nun als gerätespezifisches Problem, zu dessen Behebung der Hersteller verpflichtet ist. Wenn HTC alternativ seinen speziellen „Streaming-Modus“ für seinen Audioausgangstreiber dokumentieren möchte, könnten wir uns mit der Anpassung an dieses Modell befassen.

Wenn Sie die Wavedev.dll aus einem ROM extrahieren, sehen Sie unzählige Debugging-Meldungen bezüglich „MP3-Streams“ und dergleichen, die auf einen völlig separaten Audiopfad für Musik hinweisen, die von ihrer Software kommt. Falls erforderlich, werden wir unser WaveOut-Ausgabe-Plug-In umschreiben (unsere Ausgaberoutinen verwenden eine private Plug-In-Architektur, genau wie unsere anderen Plug-In-Typen), das die DirectShow-Ausgabe verwendet.

HTC hat es abgelehnt, zu dokumentieren, wie sie das Problem gelöst haben, und erklärt, dass sie keine Software von Drittanbietern unterstützen.

Natürlich sind XDA-Entwickler nie diejenigen, die eine solche Situation auf sich beruhen lassen. Thx1200 startet eine Prämie für Entwickler, die eine Open-Source-Lösung für dieses Problem erstellen und der Community zur Verfügung stellen können. Derzeit beträgt das Kopfgeld nur kleine 30 US-Dollar, aber ich bin sicher, dass wir viele weitere Spenden generieren können, um dieses ärgerliche Problem für jeden zu lösen, der eine Audiosoftware von Drittanbietern verwendet.

Lesen Sie den vollständigen Thread bei XDA-Developers hier, und vergessen Sie nicht, Ihr Versprechen hinzuzufügen, auch wenn Sie das Gefühl haben, dass dies eine Situation ist, die korrigiert werden muss.

Mehr zu den Themen: Audiotreiber, htc