Hi Tim
>That means you have to support KSPROPERTY_STREAM_MASTERCLOCK.
As you told to support KSPROPERTY_STREAM_MASTERCLOCK
i have implemented it and just give a KdPrint but its not coming to the set and get handler of it.
DEFINE_KSPROPERTY_TABLE (MasterClkPinPropertyTable)
{
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_STREAM_MASTERCLOCK, // property item defined in ksmedia.h
PropertyAudioMasterClock, // our “get” property handler
sizeof(KSPROPERTY), // minimum buffer length for property
sizeof(ULONGLONG), // minimum buffer length for returned data
PropertyAudioMasterClock, // our “set” property handler
NULL, // default values
0, // related properties
NULL,
NULL, // no raw serialization handler
0 // don’t serialize
)
};
DEFINE_KSPROPERTY_SET_TABLE (MasterClkPinPropertySetTable)
{
DEFINE_KSPROPERTY_SET
(
&KSPROPSETID_Stream, // property set defined in ksmedia.h
SIZEOF_ARRAY(MasterClkPinPropertyTable), // the properties supported
MasterClkPinPropertyTable,
0, // reserved
NULL // reserved
)
};
DEFINE_KSAUTOMATION_TABLE (AudioPinAutomationTable)
{
DEFINE_KSAUTOMATION_PROPERTIES (MasterClkPinPropertySetTable),
DEFINE_KSAUTOMATION_METHODS_NULL,
DEFINE_KSAUTOMATION_EVENTS_NULL
};
I have provided AudioPinAutomationTable to my pin automation table in KSPIN_DESCRIPTOR_EX.
const
KSPIN_DESCRIPTOR_EX
CaptureFilterPinDescriptors[CAPTURE_FILTER_PIN_COUNT] = {
//
// CLAUDIO_AUDIO_CAPTURE_PIN
//
{
&AudioCapturePinDispatch,
&AudioPinAutomationTable,
{
NULL, // default interfaces (NULL, 0 == default)
0,
NULL, // default mediums (NULL, 0 == default)
0,
SIZEOF_ARRAY(CapturePinDataRanges), // Range count (filled in later)
CapturePinDataRanges, // Ranges (filled in later)
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
&KSCATEGORY_AUDIO, // Category
&g_PINNAME_AUDIO_CAPTURE, // Name
0 // Reserved
},
// Flags
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY,
1, // Instances Possible
1, // Instances Necessary
&AudioDefaultAllocatorFraming, // Allocator Framing (filled later)
reinterpret_cast // Intersect Handler
(CAudioCapturePin::IntersectHandler)
},
//
//CLAUDIO_MIC_BRIDGE_PIN
//
{
NULL,
NULL,
{
NULL, // default interfaces (NULL, 0 == default)
0,
NULL, // default mediums (NULL, 0 == default)
0,
SIZEOF_ARRAY(PinDataRangePointersBridge), // Range count (filled in later)
PinDataRangePointersBridge, // Ranges (filled in later)
KSPIN_DATAFLOW_IN, // Dataflow
KSPIN_COMMUNICATION_BRIDGE, // Communication
&KSNODETYPE_MICROPHONE, // Category
NULL, // Name
0 // Reserved
},
0,
0, // Instances Possible
0, // Instances Necessary
NULL, // Allocator Framing (filled later)
NULL, // Intersect Handler
}
};
NTSTATUS PropertyAudioMasterClock
(
IN PIRP pIrp,
IN PKSPROPERTY property,
IN OUT HANDLE handle
)
{KdPrint((“>>PropertyAudioMasterClock \n”));
if(property->Flags & KSPROPERTY_TYPE_SET){
// set property
KdPrint((“>>PropertyAudioMasterClock set property \n”));
}
else if(property->Flags & KSPROPERTY_TYPE_GET){
//get property
KdPrint((“>>PropertyAudioMasterClock get property \n”));
}
pIrp->IoStatus.Status = STATUS_SUCCESS;
return STATUS_SUCCESS;
}
i have also implemented KSPIN_FLAG_IMPLEMENT_CLOCK flag in KSPIN_DESCRIPTOR_EX but still its not getting any kdprint of get and set handler.
i have also given the callback function KSCLOCK_DISPATCH in KSPIN_DISPATCH.
const
KSCLOCK_DISPATCH
DispatchAudioPinClock ={
AudioPinSetTimer, // SetTimer
AudioPinCancelTimer, // CancelTimer
AudioPinCorrelatedTime, // CorrelatedTime
AudioPinResolution // Resolution
};
and just give a KdPrint in that functions but still not getting any call for that function.
and in my code i am not using KeSetTimer and DPCs
can any one tell why i am not getting any call for these functions.
>>What DO you see in that case?
i am getting the data from the device to my host driver but there is no clock interface so it cant render by render filter.
any suggesstions would help me…
Thanks
Avinash Nabait