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/p... ============================================================================== --- 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/p... ============================================================================== --- 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/p... ============================================================================== --- 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/p... ============================================================================== --- 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/p... ============================================================================== --- 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/p... ============================================================================== --- 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;