ULONG CurrentOffset;
LONG NumMappings;
ULONG NumDataAvailable;
+ BOOL StartStream;
KSPIN_CONNECT *ConnectDetails;
PKSDATAFORMAT_WAVEFORMATEX DataFormat;
Mapping->Header = (KSSTREAM_HEADER*)Buffer;
Mapping->Irp = Irp;
KeInitializeDpc(&Mapping->Dpc, DpcRoutine, (PVOID)Mapping);
+ KeSetImportanceDpc(&Mapping->Dpc, HighImportance);
if (This->MaxFrameSize)
{
BOOL Result;
IIrpQueueImpl * This = (IIrpQueueImpl*)iface;
+ if (This->StartStream)
+ return TRUE;
+
if (This->DataFormat->WaveFormatEx.nAvgBytesPerSec < This->NumDataAvailable)
+ {
+ This->StartStream = TRUE;
Result = TRUE;
+ }
else
Result = FALSE;
{
IIrpQueueImpl * This = (IIrpQueueImpl*)iface;
This->DataFormat = (PKSDATAFORMAT_WAVEFORMATEX)DataFormat;
+ This->StartStream = FALSE;
}
This = (IPortPinWaveCyclicImpl*)Ctx->Pin;
+ IoFreeWorkItem(Ctx->WorkItem);
+ FreeItem(Ctx, TAG_PORTCLASS);
+
+ if (This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue))
+ return;
+
/* Set the state to stop */
This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_STOP);
/* Set internal state to stop */
This->State = KSSTATE_STOP;
- IoFreeWorkItem(Ctx->WorkItem);
- FreeItem(Ctx, TAG_PORTCLASS);
-
DPRINT1("Stopping %p %u Irql %u\n", This, This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue), KeGetCurrentIrql());
}
Status = KsCreatePin(WorkerContext->Entry->Handle, MixerPinConnect, GENERIC_READ | GENERIC_WRITE, &RealPinHandle);
if (!NT_SUCCESS(Status))
{
+ /* This should not fail */
DPRINT1("KsCreatePin failed with %x\n", Status);
- /* This should not fail */
- KeBugCheck(0);
+ DPRINT1(" InputFormat: SampleRate %u Bits %u Channels %u\n", InputFormat->WaveFormatEx.nSamplesPerSec, InputFormat->WaveFormatEx.wBitsPerSample, InputFormat->WaveFormatEx.nChannels);
+ DPRINT1("OutputFormat: SampleRate %u Bits %u Channels %u\n", OutputFormat->WaveFormatEx.nSamplesPerSec, OutputFormat->WaveFormatEx.wBitsPerSample, OutputFormat->WaveFormatEx.nChannels);
+
+ SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
+ ExFreePool(WorkerContext->DispatchContext);
+ ExFreePool(MixerPinConnect);
+ IoFreeWorkItem(WorkerContext->WorkItem);
+ ExFreePool(WorkerContext);
return;
}
- DPRINT(" InputFormat: SampleRate %u Bits %u Channels %u\n", InputFormat->WaveFormatEx.nSamplesPerSec, InputFormat->WaveFormatEx.wBitsPerSample, InputFormat->WaveFormatEx.nChannels);
- DPRINT("OutputFormat: SampleRate %u Bits %u Channels %u\n", OutputFormat->WaveFormatEx.nSamplesPerSec, OutputFormat->WaveFormatEx.wBitsPerSample, OutputFormat->WaveFormatEx.nChannels);
}
/* get pin file object */