[wdmaudiodev] Re: PcAddStreamResource IRQ question

  • From: "Vincent Burel \(VB-Audio\)" <vincent.burel@xxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Mon, 16 Apr 2018 15:14:25 +0200

Hello,

On current Windows O/S, It makes no sense to manage 32 samples buffer size on 
ASIO driver (or any audio driver).
First because Windows cannot manage time slot below 1 ms (1ms must be 
considered as Real Time Jitter under Windows - from XP to current WIN10 - but 
the validated value is more closed to 3ms).
Secondly because interrupt incident (due to multitask, page out etc... can 
bring 2 or 3 ms penalty in an audio callback process). so you may consider 
buffer size above 2.5 to 5 ms to provide a reliable real time audio stream (it 
makes usually 128 to 256 samples at 48kHz).

Some audio board manufacturers already did it, they can provide down to 32 or 
even 16 samples buffer size but it's a disaster in term or stability and real 
time (because they are obliged to call the process several time in the same 
time slot, breaking the basic DSP time rules) and finally get a real latency 
bigger than on well implemented drivers using 128 or 256 samples buffer.

Regards
Vincent Burel

-----Message d'origine-----
De : wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] ;
De la part de Mike Audet
Envoyé : lundi 16 avril 2018 14:34
À : wdmaudiodev@xxxxxxxxxxxxx
Objet : [wdmaudiodev] PcAddStreamResource IRQ question

Hi everyone,

Does anyone know how to use the new PcAddStreamResource function to register an 
IRQ?

The Interrupt stricture in PCSTREAMRESOURCE_DESCRIPTOR looks like this:

struct {
            ULONG Version;
            PVOID Generic;
} Interrupt;

I'm not sure what to assign to either Version or Generic.

I've searched online and in the archive, and I've only been able to find sample 
code that relates to registering a thread.

I'm trying to make an ASIO driver more robust at a 32 sample buffer size.

Below is some code I've roughed in to my ConnectInterrupt routine.

Thanks so much!

Mike

roughed in code:

PCSTREAMRESOURCE_DESCRIPTOR_INIT(&ResourceDescriptor);
ResourceDescriptor.Pdo = DeviceExtension->PhysicalDeviceObject;
ResourceDescriptor.Type = ePcStreamResourceInterrupt; 
ResourceDescriptor.Resource.Interrupt.Version = ???;//no idea at all....
ResourceDescriptor.Resource.Interrupt.Generic = 
(PVOID)DeviceExtension->InterruptObject; //just a guess....is this right?
ResourceDescriptor.Resource.ResourceSet = NULL; result = 
PcAddStreamResource(DeviceExtension->PhysicalDeviceObject,
NULL, &ResourceDescriptor, &DeviceExtension->irqResourceHandle);
if (!NT_SUCCESS(result))
{
       DbgPrint("Error calling PcAddStreamResource: %u", result); }

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

Other related posts: