HTC DriverGate – de audioversie

Pictogram voor leestijd 4 minuut. lezen


Lezers helpen MSpoweruser ondersteunen. We kunnen een commissie krijgen als u via onze links koopt. Tooltip-pictogram

Lees onze openbaarmakingspagina om erachter te komen hoe u MSPoweruser kunt helpen het redactieteam te ondersteunen Lees meer

bestuurderspoort

Welnu, na een dag of twee Windows Mobile goed te voelen, keren we terug naar enkele problemen die onze apparaten onnodig teisteren.

Het lijkt erop dat stuurprogramma's opnieuw van invloed zijn op geselecteerde HTC-apparaten, inclusief alle geavanceerde apparaten van de huidige generatie zoals de HTC Touch Diamond, Touch Pro, HD en Xperia. Wanneer geluid periodiek wordt afgespeeld via een koptelefoon of luidsprekers (meestal eens per 5 minuten), hoort u een korte "sprong" in de audio. Het geluid is beschreven als een lag/skip/hiccup/tick/blip. Het probleem lijkt diep in de wave device driver te zitten of mogelijk het hardware wave device zelf (Qualcomm weer in actie?) Het probleem lijkt niet aanwezig te zijn in A2DP.

Het probleem treft vooral externe spelers, aangezien HTC het probleem lijkt te hebben opgelost, maar alleen voor zichzelf, door een aangepaste wave-driver te bouwen.

Het Conduits Pocket Player-team heeft het probleem onderzocht en is ontmoedigd teruggekomen. Dit is wat die te zeggen hebben over het onderwerp.

We hebben uitgebreide tests gedaan met betrekking tot het probleem met het overslaan van audio van HTC en zijn tot de conclusie gekomen dat Conduits dit niet kan oplossen. Na analyse van het programma HTC Audio Manager en verschillende andere bestanden (zoals HTC's DirectShow Audio Renderer HTCRenderFlt2.dll en HTCADXRenderer4.dll), ontdekten we dat beide een aantal zeer speciale systeemaanroepen doen naar de WaveOut-driver.

Hier zijn enkele technische details voor wat we hebben gevonden. Ten eerste denken we niet dat de prioriteit van threads of processen iets met het probleem te maken heeft. Normale audiotoepassingen gebruiken een cyclus van 'waveOut-buffers' die de audio-uitvoer 'vol' houden met audiogegevens die het systeem kan ophalen en afspelen. Toepassingen gebruiken standaard waveOutWrite-functies om deze buffers te vullen. Vanuit het standpunt van Pocket Player zijn deze buffers altijd vol, en het aanpassen van de prioriteiten heeft hier geen invloed op. Een manier om het overslaan van audio te verbeteren (die van invloed was op de HTC TyTN) was om de threadprioriteit van het WaveOut-stuurprogramma te verhogen door een registerwaarde te bewerken onder HKLM\Drivers\Builtin\WaveOut. Deze aanpak werkte hier niet. Interessant genoeg komen deze problemen met overslaan voor op desktop-pc's. Daar heeft het probleem te maken met realtime-stuurprogramma's die "te lang" duren in hun verwerking, waardoor het audiostuurprogramma de volgende batch geluid niet kan verwerken. Dit gebeurt in Vista met sommige MacBook-stuurprogramma's.

De Audio Manager gebruikt een ander uitvoermechanisme dan de standaard waveOut-aanroepen - het gebruikt het DirectShow-filter voor het renderen van audio, wat een andere manier is om audio te verzenden. Kijkend naar de binnenkant van hoe het werkt, gebruikt het een heel ander mechanisme. Het gebruikt een gepatenteerde waveOutMessage-aanroep om een ​​nieuwe berichtenwachtrij te openen, waar vervolgens audio doorheen wordt 'gestreamd'.

Pocket Player (en andere toepassingen) zouden dit probleem mogelijk kunnen oplossen door de HTC Audio Renderer te gebruiken in plaats van hun eigen waveOut-routines, maar dan zouden we crossfading en andere Pocket Player-specifieke functies verliezen. We hebben enkele eerste tests gedaan om een ​​DirectShow-filtergrafiek te maken (compleet met hun Audio Renderer), maar we ondervonden nog steeds het overslaan, dus er moeten aanvullende stappen zijn.

Als gevolg hiervan beschouwt Conduits dit nu als een apparaatspecifiek probleem dat de fabrikant verplicht is op te lossen. Als alternatief, als HTC hun speciale "streamingmodus" voor hun audio-uitvoerstuurprogramma wil documenteren, kunnen we overwegen om ons aan te passen aan dat model.

Als je de Wavedev.dll uit een ROM haalt, zul je talloze foutopsporingsberichten zien met betrekking tot "MP3-streams" en dergelijke, die een volledig gescheiden audiopad aangeven voor muziek die uit hun software komt. Indien nodig zullen we onze WaveOut output plug-in herschrijven (onze output routines gebruiken een private plug-in architectuur net als onze andere plug-in types) die de DirectShow output gebruikt.

HTC heeft geweigerd te documenteren hoe ze het probleem hebben opgelost, omdat het geen software van derden ondersteunt.

Natuurlijk zijn XDA-ontwikkelaars nooit degenen die een situatie als deze laten liggen. Thx1200 start een premie voor ontwikkelaars die een open source-oplossing voor dit probleem kunnen produceren en beschikbaar stellen aan de gemeenschap. Momenteel is de premie slechts een kleine $ 30, maar ik weet zeker dat we nog veel meer donaties kunnen genereren om dit vervelende probleem aan te pakken voor iedereen die audiosoftware van derden gebruikt.

Lees de volledige thread op XDA-Developers hier, en vergeet niet uw belofte toe te voegen, ook als u vindt dat dit een situatie is die moet worden gecorrigeerd.

Meer over de onderwerpen: audiostuurprogramma's, htc