GUID NodeTypeCapture = { STATIC_PINNAME_CAPTURE };
GUID NodeTypePlayback = { STATIC_KSCATEGORY_AUDIO };
GUID GUID_KSCATEGORY_AUDIO = { STATIC_KSCATEGORY_AUDIO };
-GUID GUID_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
-GUID GUID_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
-GUID GUID_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = { STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX };
+
KSPIN_INTERFACE StandardPinInterface =
{
{STATIC_KSINTERFACESETID_Standard},
PKSFILTER Filter,
PIRP Irp)
{
- UNIMPLEMENTED
+ PKSFILTERFACTORY FilterFactory;
+ PKSDEVICE Device;
+ PFILTER_CONTEXT FilterContext;
+
+ FilterFactory = KsGetParent(Filter);
+ if (FilterFactory == NULL)
+ {
+ /* invalid parameter */
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ Device = KsGetParent(FilterFactory);
+ if (Device == NULL)
+ {
+ /* invalid parameter */
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ /* alloc filter context */
+ FilterContext = AllocFunction(sizeof(FILTER_CONTEXT));
+ if (FilterContext == NULL)
+ {
+ /* no memory */
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ /* init context */
+ FilterContext->DeviceExtension = Device->Context;
+ FilterContext->LowerDevice = Device->NextDeviceObject;
+ Filter->Context = FilterContext;
+
+ DPRINT("USBAudioFilterCreate FilterContext %p LowerDevice %p DeviceExtension %p\n", FilterContext, FilterContext->LowerDevice, FilterContext->DeviceExtension);
+ KsAddItemToObjectBag(Filter->Bag, FilterContext, ExFreePool);
return STATUS_SUCCESS;
}
}
DataRangeAudio->DataRange.FormatSize = sizeof(KSDATARANGE_AUDIO);
- DataRangeAudio->DataRange.MajorFormat = GUID_KSDATAFORMAT_TYPE_AUDIO;
- DataRangeAudio->DataRange.SubFormat = GUID_KSDATAFORMAT_SUBTYPE_PCM;
- DataRangeAudio->DataRange.Specifier = GUID_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
+ DataRangeAudio->DataRange.MajorFormat = KSDATAFORMAT_TYPE_AUDIO;
+ DataRangeAudio->DataRange.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+ DataRangeAudio->DataRange.Specifier = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
DataRangeAudio->MaximumChannels = 1;
DataRangeAudio->MinimumBitsPerSample = StreamingFormatDescriptor->bBitResolution;
DataRangeAudio->MaximumBitsPerSample = StreamingFormatDescriptor->bBitResolution;
/* irp sinks / sources can be instantiated */
Pins[Index].InstancesPossible = 1;
+ Pins[Index].InstancesNecessary = 1;
}
else
{