mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:42:57 +00:00
- Implement KSPROPERTY_CONNECTION_ALLOCATORFRAMING for CPortPinWaveCyclic + CPortPinWavePci
svn path=/trunk/; revision=43446
This commit is contained in:
parent
a9b7f4cd7a
commit
7f2ba55772
3 changed files with 77 additions and 16 deletions
|
@ -51,6 +51,7 @@ protected:
|
||||||
friend NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
friend NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
friend NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
friend NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
friend NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
friend NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
|
friend NTSTATUS NTAPI PinWaveCyclicAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
|
|
||||||
IPortWaveCyclic * m_Port;
|
IPortWaveCyclic * m_Port;
|
||||||
IPortFilterWaveCyclic * m_Filter;
|
IPortFilterWaveCyclic * m_Filter;
|
||||||
|
@ -75,6 +76,7 @@ protected:
|
||||||
ULONG m_TotalPackets;
|
ULONG m_TotalPackets;
|
||||||
ULONG m_StopCount;
|
ULONG m_StopCount;
|
||||||
KSAUDIO_POSITION m_Position;
|
KSAUDIO_POSITION m_Position;
|
||||||
|
KSALLOCATOR_FRAMING m_AllocatorFraming;
|
||||||
SUBDEVICE_DESCRIPTOR m_Descriptor;
|
SUBDEVICE_DESCRIPTOR m_Descriptor;
|
||||||
|
|
||||||
ULONG m_Delay;
|
ULONG m_Delay;
|
||||||
|
@ -93,9 +95,9 @@ typedef struct
|
||||||
NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
NTSTATUS NTAPI PinWaveCyclicState(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
NTSTATUS NTAPI PinWaveCyclicDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
NTSTATUS NTAPI PinWaveCyclicAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
|
NTSTATUS NTAPI PinWaveCyclicAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
|
|
||||||
|
DEFINE_KSPROPERTY_CONNECTIONSET(PinWaveCyclicConnectionSet, PinWaveCyclicState, PinWaveCyclicDataFormat, PinWaveCyclicAllocatorFraming);
|
||||||
DEFINE_KSPROPERTY_CONNECTIONSET(PinWaveCyclicConnectionSet, PinWaveCyclicState, PinWaveCyclicDataFormat);
|
|
||||||
DEFINE_KSPROPERTY_AUDIOSET(PinWaveCyclicAudioSet, PinWaveCyclicAudioPosition);
|
DEFINE_KSPROPERTY_AUDIOSET(PinWaveCyclicAudioSet, PinWaveCyclicAudioPosition);
|
||||||
|
|
||||||
KSPROPERTY_SET PinWaveCyclicPropertySet[] =
|
KSPROPERTY_SET PinWaveCyclicPropertySet[] =
|
||||||
|
@ -144,7 +146,40 @@ CPortPinWaveCyclic::QueryInterface(
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
PinWaveCyclicAllocatorFraming(
|
||||||
|
IN PIRP Irp,
|
||||||
|
IN PKSIDENTIFIER Request,
|
||||||
|
IN OUT PVOID Data)
|
||||||
|
{
|
||||||
|
CPortPinWaveCyclic *Pin;
|
||||||
|
PSUBDEVICE_DESCRIPTOR Descriptor;
|
||||||
|
|
||||||
|
// get sub device descriptor
|
||||||
|
Descriptor = (PSUBDEVICE_DESCRIPTOR)KSPROPERTY_ITEM_IRP_STORAGE(Irp);
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
PC_ASSERT(Descriptor);
|
||||||
|
PC_ASSERT(Descriptor->PortPin);
|
||||||
|
PC_ASSERT_IRQL(DISPATCH_LEVEL);
|
||||||
|
|
||||||
|
// cast to pin impl
|
||||||
|
Pin = (CPortPinWaveCyclic*)Descriptor->PortPin;
|
||||||
|
|
||||||
|
|
||||||
|
if (Request->Flags & KSPROPERTY_TYPE_GET)
|
||||||
|
{
|
||||||
|
// copy pin framing
|
||||||
|
RtlMoveMemory(Data, &Pin->m_AllocatorFraming, sizeof(KSALLOCATOR_FRAMING));
|
||||||
|
|
||||||
|
Irp->IoStatus.Information = sizeof(KSALLOCATOR_FRAMING);
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// not supported
|
||||||
|
return STATUS_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -960,6 +995,7 @@ CPortPinWaveCyclic::Init(
|
||||||
PDEVICE_OBJECT DeviceObject;
|
PDEVICE_OBJECT DeviceObject;
|
||||||
BOOLEAN Capture;
|
BOOLEAN Capture;
|
||||||
PVOID SilenceBuffer;
|
PVOID SilenceBuffer;
|
||||||
|
PSUBDEVICE_DESCRIPTOR SubDeviceDescriptor = NULL;
|
||||||
//IDrmAudioStream * DrmAudio = NULL;
|
//IDrmAudioStream * DrmAudio = NULL;
|
||||||
|
|
||||||
m_KsPinDescriptor = KsPinDescriptor;
|
m_KsPinDescriptor = KsPinDescriptor;
|
||||||
|
@ -1015,6 +1051,8 @@ CPortPinWaveCyclic::Init(
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DPRINT("CPortPinWaveCyclic::Init Status %x\n", Status);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
return Status;
|
return Status;
|
||||||
|
|
||||||
|
@ -1025,8 +1063,6 @@ CPortPinWaveCyclic::Init(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
return Status;
|
return Status;
|
||||||
|
|
||||||
PSUBDEVICE_DESCRIPTOR SubDeviceDescriptor = NULL;
|
|
||||||
|
|
||||||
Status = Subdevice->GetDescriptor(&SubDeviceDescriptor);
|
Status = Subdevice->GetDescriptor(&SubDeviceDescriptor);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -1044,11 +1080,10 @@ CPortPinWaveCyclic::Init(
|
||||||
m_Descriptor.UnknownMiniport = SubDeviceDescriptor->UnknownMiniport;
|
m_Descriptor.UnknownMiniport = SubDeviceDescriptor->UnknownMiniport;
|
||||||
m_Descriptor.PortPin = (PVOID)this;
|
m_Descriptor.PortPin = (PVOID)this;
|
||||||
|
|
||||||
DPRINT("CPortPinWaveCyclic::Init Status %x\n", Status);
|
|
||||||
|
|
||||||
// release subdevice descriptor
|
// release subdevice descriptor
|
||||||
Subdevice->Release();
|
Subdevice->Release();
|
||||||
|
|
||||||
|
// add ourselves to service group
|
||||||
Status = m_ServiceGroup->AddMember(PSERVICESINK(this));
|
Status = m_ServiceGroup->AddMember(PSERVICESINK(this));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -1072,6 +1107,15 @@ CPortPinWaveCyclic::Init(
|
||||||
if (!SilenceBuffer)
|
if (!SilenceBuffer)
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
|
|
||||||
|
/* set up allocator framing */
|
||||||
|
m_AllocatorFraming.RequirementsFlags = KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY | KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY;
|
||||||
|
m_AllocatorFraming.PoolType = NonPagedPool;
|
||||||
|
m_AllocatorFraming.Frames = 8;
|
||||||
|
m_AllocatorFraming.FileAlignment = FILE_64_BYTE_ALIGNMENT;
|
||||||
|
m_AllocatorFraming.Reserved = 0;
|
||||||
|
m_AllocatorFraming.FrameSize = m_FrameSize;
|
||||||
|
|
||||||
m_Stream->Silence(SilenceBuffer, m_FrameSize);
|
m_Stream->Silence(SilenceBuffer, m_FrameSize);
|
||||||
|
|
||||||
Status = m_IrpQueue->Init(ConnectDetails, DataFormat, DeviceObject, m_FrameSize, 0, SilenceBuffer);
|
Status = m_IrpQueue->Init(ConnectDetails, DataFormat, DeviceObject, m_FrameSize, 0, SilenceBuffer);
|
||||||
|
|
|
@ -94,7 +94,7 @@ NTSTATUS NTAPI PinWavePciDataFormat(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OU
|
||||||
NTSTATUS NTAPI PinWavePciAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
NTSTATUS NTAPI PinWavePciAudioPosition(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
NTSTATUS NTAPI PinWavePciAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
NTSTATUS NTAPI PinWavePciAllocatorFraming(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data);
|
||||||
|
|
||||||
DEFINE_KSPROPERTY_ALLOCATORFRAMING(PinWavePciConnectionSet, PinWavePciState, PinWavePciDataFormat, PinWavePciAllocatorFraming);
|
DEFINE_KSPROPERTY_CONNECTIONSET(PinWavePciConnectionSet, PinWavePciState, PinWavePciDataFormat, PinWavePciAllocatorFraming);
|
||||||
DEFINE_KSPROPERTY_AUDIOSET(PinWavePciAudioSet, PinWavePciAudioPosition);
|
DEFINE_KSPROPERTY_AUDIOSET(PinWavePciAudioSet, PinWavePciAudioPosition);
|
||||||
|
|
||||||
KSPROPERTY_SET PinWavePciPropertySet[] =
|
KSPROPERTY_SET PinWavePciPropertySet[] =
|
||||||
|
@ -123,8 +123,32 @@ PinWavePciAllocatorFraming(
|
||||||
IN PKSIDENTIFIER Request,
|
IN PKSIDENTIFIER Request,
|
||||||
IN OUT PVOID Data)
|
IN OUT PVOID Data)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
CPortPinWavePci *Pin;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
PSUBDEVICE_DESCRIPTOR Descriptor;
|
||||||
|
|
||||||
|
// get sub device descriptor
|
||||||
|
Descriptor = (PSUBDEVICE_DESCRIPTOR)KSPROPERTY_ITEM_IRP_STORAGE(Irp);
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
PC_ASSERT(Descriptor);
|
||||||
|
PC_ASSERT(Descriptor->PortPin);
|
||||||
|
PC_ASSERT_IRQL(DISPATCH_LEVEL);
|
||||||
|
|
||||||
|
// cast to pin impl
|
||||||
|
Pin = (CPortPinWavePci*)Descriptor->PortPin;
|
||||||
|
|
||||||
|
|
||||||
|
if (Request->Flags & KSPROPERTY_TYPE_GET)
|
||||||
|
{
|
||||||
|
// copy pin framing
|
||||||
|
RtlMoveMemory(Data, &Pin->m_AllocatorFraming, sizeof(KSALLOCATOR_FRAMING));
|
||||||
|
|
||||||
|
Irp->IoStatus.Information = sizeof(KSALLOCATOR_FRAMING);
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// not supported
|
||||||
|
return STATUS_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -317,13 +317,6 @@ PcHandlePropertyWithTable(
|
||||||
IN PSUBDEVICE_DESCRIPTOR Descriptor);
|
IN PSUBDEVICE_DESCRIPTOR Descriptor);
|
||||||
|
|
||||||
#define DEFINE_KSPROPERTY_CONNECTIONSET(PinSet,\
|
#define DEFINE_KSPROPERTY_CONNECTIONSET(PinSet,\
|
||||||
PropStateHandler, PropDataFormatHandler)\
|
|
||||||
DEFINE_KSPROPERTY_TABLE(PinSet) {\
|
|
||||||
DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\
|
|
||||||
DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(PropDataFormatHandler, PropDataFormatHandler)\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEFINE_KSPROPERTY_ALLOCATORFRAMING(PinSet,\
|
|
||||||
PropStateHandler, PropDataFormatHandler, PropAllocatorFraming)\
|
PropStateHandler, PropDataFormatHandler, PropAllocatorFraming)\
|
||||||
DEFINE_KSPROPERTY_TABLE(PinSet) {\
|
DEFINE_KSPROPERTY_TABLE(PinSet) {\
|
||||||
DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\
|
DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue