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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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;