Author: janderwald
Date: Fri Oct 14 13:26:22 2016
New Revision: 72970

URL: http://svn.reactos.org/svn/reactos?rev=72970&view=rev
Log:
[USBAUDIO]
- partly implement UsbAudioPinDataIntersect

Modified:
    trunk/reactos/drivers/usb/usbaudio/filter.c
    trunk/reactos/drivers/usb/usbaudio/pin.c
    trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72970&r1=72969&r2=72970&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -448,7 +448,10 @@
                 Pins[Index].PinDescriptor.DataFlow = KSPIN_DATAFLOW_IN;
             }
 
-
+            /* data intersect handler */
+            Pins[Index].IntersectHandler = UsbAudioPinDataIntersect;
+
+            /* pin flags */
             Pins[Index].Flags = KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | 
KSFILTER_FLAG_CRITICAL_PROCESSING;
 
             /* irp sinks / sources can be instantiated */

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72970&r1=72969&r2=72970&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbaudio/pin.c    [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c    [iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -1074,3 +1074,65 @@
 
     return Status;
 }
+
+
+NTSTATUS
+NTAPI
+UsbAudioPinDataIntersect(
+    _In_  PVOID        Context,
+    _In_  PIRP         Irp,
+    _In_  PKSP_PIN     Pin,
+    _In_  PKSDATARANGE DataRange,
+    _In_  PKSDATARANGE MatchingDataRange,
+    _In_  ULONG        DataBufferSize,
+    _Out_ PVOID        Data,
+    _Out_ PULONG       DataSize)
+{
+    PKSFILTER Filter;
+    PKSPIN_DESCRIPTOR_EX PinDescriptor;
+    PKSDATAFORMAT_WAVEFORMATEX DataFormat;
+    PKSDATARANGE_AUDIO DataRangeAudio;
+
+    /* get filter from irp*/
+    Filter = KsGetFilterFromIrp(Irp);
+    if (!Filter)
+    {
+        /* no match*/
+        return STATUS_NO_MATCH;
+    }
+
+    /* get pin descriptor */
+    PinDescriptor = &Filter->Descriptor->PinDescriptors[Pin->PinId];
+
+    *DataSize = sizeof(KSDATAFORMAT_WAVEFORMATEX);
+    if (DataBufferSize == 0)
+    {
+        /* buffer too small */
+        return STATUS_BUFFER_OVERFLOW;
+    }
+
+    /* sanity checks*/
+    ASSERT(PinDescriptor->PinDescriptor.DataRangesCount >= 0);
+    ASSERT(PinDescriptor->PinDescriptor.DataRanges[0]->FormatSize == 
sizeof(KSDATARANGE_AUDIO));
+
+    DataRangeAudio = 
(PKSDATARANGE_AUDIO)PinDescriptor->PinDescriptor.DataRanges[0];
+
+    DataFormat = Data;
+    DataFormat->WaveFormatEx.wFormatTag = WAVE_FORMAT_PCM;
+    DataFormat->WaveFormatEx.nChannels = DataRangeAudio->MaximumChannels;
+    DataFormat->WaveFormatEx.nSamplesPerSec = 
DataRangeAudio->MaximumSampleFrequency;
+    DataFormat->WaveFormatEx.nAvgBytesPerSec = 
DataRangeAudio->MaximumSampleFrequency * (DataRangeAudio->MaximumBitsPerSample 
/ 8) * DataRangeAudio->MaximumChannels;
+    DataFormat->WaveFormatEx.nBlockAlign = 
(DataRangeAudio->MaximumBitsPerSample / 8) * DataRangeAudio->MaximumChannels;
+    DataFormat->WaveFormatEx.wBitsPerSample = 
DataRangeAudio->MaximumBitsPerSample;
+    DataFormat->WaveFormatEx.cbSize = 0;
+
+    DataFormat->DataFormat.FormatSize = sizeof(KSDATAFORMAT) + 
sizeof(WAVEFORMATEX);
+    DataFormat->DataFormat.Flags = 0;
+    DataFormat->DataFormat.Reserved = 0;
+    DataFormat->DataFormat.MajorFormat = KSDATAFORMAT_TYPE_AUDIO;
+    DataFormat->DataFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+    DataFormat->DataFormat.Specifier = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
+    DataFormat->DataFormat.SampleSize = (DataRangeAudio->MaximumBitsPerSample 
/ 8) * DataRangeAudio->MaximumChannels;
+
+    return STATUS_SUCCESS;
+}

Modified: trunk/reactos/drivers/usb/usbaudio/usbaudio.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/usbaudio.h?rev=72970&r1=72969&r2=72970&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbaudio/usbaudio.h       [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/usbaudio.h       [iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -255,6 +255,18 @@
 
 NTSTATUS
 NTAPI
+UsbAudioPinDataIntersect(
+    _In_  PVOID        Context,
+    _In_  PIRP         Irp,
+    _In_  PKSP_PIN     Pin,
+    _In_  PKSDATARANGE DataRange,
+    _In_  PKSDATARANGE MatchingDataRange,
+    _In_  ULONG        DataBufferSize,
+    _Out_ PVOID        Data,
+    _Out_ PULONG       DataSize);
+
+NTSTATUS
+NTAPI
 UsbAudioCaptureComplete(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp,


Reply via email to