[ros-diffs] [janderwald] 45860: [PORTCLS] - More cleanup - Only copy audio bytes to common buffer when the audio pin is in the running state - Only notify miniport when the audio pin is in the running state

janderwald at svn.reactos.org janderwald at svn.reactos.org
Fri Mar 5 10:43:42 CET 2010


Author: janderwald
Date: Fri Mar  5 10:43:42 2010
New Revision: 45860

URL: http://svn.reactos.org/svn/reactos?rev=45860&view=rev
Log:
[PORTCLS]
- More cleanup
- Only copy audio bytes to common buffer when the audio pin is in the running state
- Only notify miniport when the audio pin is in the running state

Modified:
    trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_dmus.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.cpp

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -320,8 +320,6 @@
 
     STDMETHOD_(NTSTATUS, Init)(THIS_
         IN KSPIN_CONNECT *ConnectDetails,
-        IN PKSDATAFORMAT DataFormat,
-        IN PDEVICE_OBJECT DeviceObject,
         IN ULONG FrameSize,
         IN ULONG Alignment,
         IN PVOID SilenceBuffer) PURE;
@@ -359,8 +357,6 @@
 #define IMP_IIrpQueue                                  \
     STDMETHODIMP_(NTSTATUS) Init(THIS_                 \
         IN KSPIN_CONNECT *ConnectDetails,              \
-        IN PKSDATAFORMAT DataFormat,                   \
-        IN PDEVICE_OBJECT DeviceObject,                \
         IN ULONG FrameSize,                            \
         IN ULONG Alignment,                            \
         IN PVOID SilenceBuffer);                       \

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -38,10 +38,7 @@
     volatile ULONG m_CurrentOffset;
     LONG m_NumMappings;
     ULONG m_NumDataAvailable;
-    BOOL m_StartStream;
     PKSPIN_CONNECT m_ConnectDetails;
-    PKSDATAFORMAT_WAVEFORMATEX m_DataFormat;
-
     KSPIN_LOCK m_IrpListLock;
     LIST_ENTRY m_IrpList;
     LIST_ENTRY m_FreeIrpList;
@@ -51,7 +48,6 @@
     ULONG m_OutOfMapping;
     ULONG m_MaxFrameSize;
     ULONG m_Alignment;
-    ULONG m_MinimumDataThreshold;
 
     LONG m_Ref;
 
@@ -87,18 +83,14 @@
 NTAPI
 CIrpQueue::Init(
     IN KSPIN_CONNECT *ConnectDetails,
-    IN PKSDATAFORMAT DataFormat,
-    IN PDEVICE_OBJECT DeviceObject,
     IN ULONG FrameSize,
     IN ULONG Alignment,
     IN PVOID SilenceBuffer)
 {
     m_ConnectDetails = ConnectDetails;
-    m_DataFormat = (PKSDATAFORMAT_WAVEFORMATEX)DataFormat;
     m_MaxFrameSize = FrameSize;
     m_SilenceBuffer = SilenceBuffer;
     m_Alignment = Alignment;
-    m_MinimumDataThreshold = ((PKSDATAFORMAT_WAVEFORMATEX)DataFormat)->WaveFormatEx.nAvgBytesPerSec / 3;
 
     InitializeListHead(&m_IrpList);
     InitializeListHead(&m_FreeIrpList);
@@ -273,10 +265,6 @@
         // no irp available, use silence buffer
         *Buffer = (PUCHAR)m_SilenceBuffer;
         *BufferSize = m_MaxFrameSize;
-        // flag for port wave pci driver
-        m_OutOfMapping = TRUE;
-        // indicate flag to restart fast buffering
-        m_StartStream = FALSE;
         return STATUS_SUCCESS;
     }
 
@@ -436,8 +424,6 @@
 
     // cancel all irps
     KsCancelIo(&m_IrpList, &m_IrpListLock);
-    // reset stream start flag
-    m_StartStream = FALSE;
     // reset number of mappings
     m_NumMappings = 0;
     // reset number of data available
@@ -470,7 +456,6 @@
     {
         // no irp available
         m_OutOfMapping = TRUE;
-        m_StartStream = FALSE;
         return STATUS_NOT_FOUND;
     }
 

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_dmus.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_dmus.cpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_dmus.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_dmus.cpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -605,7 +605,7 @@
         m_ServiceGroup->SupportDelayedService();
     }
 
-    Status = m_IrpQueue->Init(ConnectDetails, m_Format, DeviceObject, 0, 0, NULL);
+    Status = m_IrpQueue->Init(ConnectDetails, 0, 0, NULL);
     if (!NT_SUCCESS(Status))
     {
         DPRINT("IrpQueue_Init failed with %x\n", Status);

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -780,29 +780,32 @@
 
     PC_ASSERT_IRQL(DISPATCH_LEVEL);
 
-    Status = m_IrpQueue->GetMapping(&Buffer, &BufferSize);
-    if (!NT_SUCCESS(Status))
-    {
-        return;
-    }
-
-    Status = m_Stream->GetPosition(&Position);
-    DPRINT("Position %u Buffer %p BufferSize %u ActiveIrpOffset %u Capture %u\n", Position, Buffer, m_CommonBufferSize, BufferSize, m_Capture);
-
-    OldOffset = m_Position.PlayOffset;
-
-    if (Position < m_CommonBufferOffset)
-    {
-        UpdateCommonBufferOverlap(Position, m_FrameSize);
-    }
-    else if (Position >= m_CommonBufferOffset)
-    {
-        UpdateCommonBuffer(Position, m_FrameSize);
-    }
-
-    NewOffset = m_Position.PlayOffset;
-
-    GeneratePositionEvents(OldOffset, NewOffset);
+    if (m_State == KSSTATE_RUN)
+    {
+        Status = m_IrpQueue->GetMapping(&Buffer, &BufferSize);
+        if (!NT_SUCCESS(Status))
+        {
+            return;
+        }
+
+        Status = m_Stream->GetPosition(&Position);
+        DPRINT("Position %u Buffer %p BufferSize %u ActiveIrpOffset %u Capture %u\n", Position, Buffer, m_CommonBufferSize, BufferSize, m_Capture);
+
+        OldOffset = m_Position.PlayOffset;
+
+        if (Position < m_CommonBufferOffset)
+        {
+            UpdateCommonBufferOverlap(Position, m_FrameSize);
+        }
+        else if (Position >= m_CommonBufferOffset)
+        {
+            UpdateCommonBuffer(Position, m_FrameSize);
+        }
+
+        NewOffset = m_Position.PlayOffset;
+
+        GeneratePositionEvents(OldOffset, NewOffset);
+    }
 }
 
 NTSTATUS
@@ -1239,7 +1242,7 @@
     m_Stream->Silence(SilenceBuffer, m_FrameSize);
     m_Stream->Silence(m_CommonBuffer, m_CommonBufferSize);
 
-    Status = m_IrpQueue->Init(ConnectDetails, DataFormat, DeviceObject, m_FrameSize, 0, SilenceBuffer);
+    Status = m_IrpQueue->Init(ConnectDetails, m_FrameSize, 0, SilenceBuffer);
     if (!NT_SUCCESS(Status))
     {
        m_IrpQueue->Release();

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -432,9 +432,12 @@
 {
     PC_ASSERT_IRQL(DISPATCH_LEVEL);
 
-    m_Stream->Service();
-    //TODO
-    //generate events
+    if (m_State == KSSTATE_RUN)
+    {
+        m_Stream->Service();
+        //TODO
+        //generate events
+    }
 }
 
 //==================================================================================================================================
@@ -829,7 +832,7 @@
     if (!NT_SUCCESS(Status))
         return Status;
 
-    Status = m_IrpQueue->Init(ConnectDetails, m_Format, DeviceObject, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment, NULL);
+    Status = m_IrpQueue->Init(ConnectDetails, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment, NULL);
     if (!NT_SUCCESS(Status))
     {
         DPRINT("IrpQueue_Init failed with %x\n", Status);

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.cpp?rev=45860&r1=45859&r2=45860&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.cpp [iso-8859-1] Fri Mar  5 10:43:42 2010
@@ -587,7 +587,7 @@
         goto cleanup;
     }
 
-    Status = m_IrpQueue->Init(ConnectDetails, DataFormat, DeviceObject, 0, 0, NULL);
+    Status = m_IrpQueue->Init(ConnectDetails, 0, 0, NULL);
     if (!NT_SUCCESS(Status))
     {
         goto cleanup;




More information about the Ros-diffs mailing list