Vista Ultimate x64 and x86 application with Event driven Exclusive playback

All replies

  • The sample app just sits here forever, right?

            // in a production app there would be a timeout here
            WaitForSingleObject(hNeedDataEvent, INFINITE);

    This is consistent with the known issue on WOW64 exclusive-mode event-driven streaming on Vista. The event handle is not being thunked correctly between the x86 app and the amd64 driver.

    It's also just possible that it's a driver issue.  What is the PnP ID of the device - is it HD Audio?  If so you could try the Microsoft HD Audio class driver.

    Matthew van Eerde
    Friday, February 04, 2011 2:25 AM
  • Hi Matthew,

    Yes, you are right.. The sample app just hangs.. I saw that comment about the time out.. 

    On my application i have changed it to 2 secs wait instead of INFINITE.. 

    So my application doesn't hangs, but produces garbage out through the optical out. I tried to siphon the data coming from the source before giving it to the buffer and verified that the data is actually ac3 frames.. But its heard totally garbage from the receiver.

    Yes it is HD Audio.. I don't remember the PnP ID on top of my head... I am pretty sure that it is Realtek ALC885 sound chip and i installed the latest driver from realtek site which was dated Jan 28th 2011. I will let you know as soon as i get hold of that machine.. I will try the HD Audio class driver. 

    So far i have experienced this only with Vista Ultimate x64 system and not on Vista 32 or Windows 7 32/64 system. I will also see if i can set up a machine with a different audio device.. 


    Saturday, February 05, 2011 1:42 AM
  • > i have changed it to 2 secs wait instead of INFINITE

    Also check the return code; if you get anything but WAIT_OBJECT_0 then you should fail out.

    Try running on a periodic waitable timer rather than using event-driven mode (see the loopback capture sample on my blog.)

    Matthew van Eerde
    Monday, February 07, 2011 4:52 PM
  • Here is the PnP ID 



    I checked the return code and it was WAIT_TIMEOUT.

    But why does GetBuffer call return SUCCESS if the callback even handler is not signalled ? Does the AudioEngine thinks that data is PCM ?

    Let me try the waitable timer.


    Monday, February 07, 2011 11:32 PM
  • The GetBuffer() / ReleaseBuffer() calls just copy memory into the buffer that the driver is looking at.  The driver is playing the first 10 ms of AC-3 data over and over again until the next ReleaseBuffer() call gives it new data to play... the result is garbage AC-3.

    As a result of this bug event-driven exclusive WOW64 playback doesn't work on Vista.  You can do timer-driven mode instead; instead of sending down fixed-size buffers you periodically query for how much room is available in the buffer.

    Matthew van Eerde
    Tuesday, February 08, 2011 2:04 AM

    Hi Matthew,

    >> As a result of this bug event-driven exclusive WOW64 playback doesn't work on Vista. 

    When will be this ever fixed?





    Thursday, March 10, 2011 7:16 PM
  • I believe it's fixed in Windows 7.  I don't know what plans there are, if any, to release the fix downlevel to Vista.
    Matthew van Eerde
    Thursday, March 10, 2011 8:06 PM