[USBAUDIO]

- fix buffer calculation for usb headsets
- usb headsets now partially work with usbaudio in win2k3

svn path=/trunk/; revision=73124
This commit is contained in:
Johannes Anderwald 2016-11-04 18:07:44 +00:00
parent f3d71d8a6b
commit 20ff103b96
2 changed files with 4 additions and 4 deletions

View file

@ -874,6 +874,7 @@ PinRenderProcess(
IoSetCompletionRoutine(Irp, UsbAudioRenderComplete, Pin, TRUE, TRUE, TRUE);
/* calculate packet count */
/* FIXME support various sample rates */
WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
TotalPacketSize = WaveFormatEx->WaveFormatEx.nAvgBytesPerSec / 1000;
ASSERT(TotalPacketSize <= PinContext->DeviceExtension->InterfaceInfo->Pipes[0].MaximumPacketSize);
@ -883,8 +884,6 @@ PinRenderProcess(
ASSERT(PacketCount < 255);
//DPRINT1("PinRenderProcess Irp %p TotalPacketSize %lu MaximumPacketSize %lu PacketCount %lu Count %lu Data %p\n", Irp, TotalPacketSize, PinContext->DeviceExtension->InterfaceInfo->Pipes[0].MaximumPacketSize, PacketCount, CloneStreamPointer->OffsetIn.Count, CloneStreamPointer->OffsetIn.Data);
Urb = (PURB)AllocFunction(GET_ISO_URB_SIZE(PacketCount));
ASSERT(Urb);
@ -893,8 +892,8 @@ PinRenderProcess(
Urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(PacketCount);
Urb->UrbIsochronousTransfer.PipeHandle = PinContext->DeviceExtension->InterfaceInfo->Pipes[0].PipeHandle;
Urb->UrbIsochronousTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_OUT | USBD_START_ISO_TRANSFER_ASAP;
Urb->UrbIsochronousTransfer.TransferBufferLength = CloneStreamPointer->OffsetIn.Remaining;
Urb->UrbIsochronousTransfer.TransferBuffer = CloneStreamPointer->OffsetIn.Data;
Urb->UrbIsochronousTransfer.TransferBufferLength = PacketCount * TotalPacketSize;
Urb->UrbIsochronousTransfer.TransferBuffer = CloneStreamPointer->StreamHeader->Data;
Urb->UrbIsochronousTransfer.NumberOfPackets = PacketCount;
Urb->UrbIsochronousTransfer.StartFrame = 0;

View file

@ -205,6 +205,7 @@ typedef struct
PKSWORKER CaptureWorker; /* capture worker */
WORK_QUEUE_ITEM StarvationWorkItem; /* work item */
PKSWORKER StarvationWorker; /* capture worker */
ULONG BufferOffset;
}PIN_CONTEXT, *PPIN_CONTEXT;
/* filter.c */