StreamClassQueryMasterClock function (strmini.h)

When the minidriver calls the StreamClassQueryMasterClock routine, the class driver queries the appropriate time value of the master clock asynchronously, and passes the result to the routine passed in the ClockCallbackRoutine parameter.

Syntax

void StreamClassQueryMasterClock(
  [in] PHW_STREAM_OBJECT       HwStreamObject,
  [in] HANDLE                  MasterClockHandle,
  [in] TIME_FUNCTION           TimeFunction,
  [in] PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
);

Parameters

[in] HwStreamObject

Pointer to a HW_STREAM_OBJECT indicating the stream that is querying its master clock. The stream may only have one query pending at a time. The class driver passes this value to the callback in the HwStreamObject member of the callback's TimeContext parameter.

[in] MasterClockHandle

Specifies the handle for the master clock that is being queried. The class driver passes this in the SRB_INDICATE_MASTER_CLOCK request to the minidriver's StrMiniReceiveStreamControlPacket routine.

[in] TimeFunction

Specifies what time function to query the master clock for. See HW_TIME_CONTEXT for the possible values. The class driver passes this value to the callback in the Function member of the TimeContext parameter.

[in] ClockCallbackRoutine

Specifies the routine to which the class driver passes the results. The function prototype must be:

ClockCallbackRoutine(PHW_TIME_CONTEXT TimeContext);

Return value

None

Remarks

The class driver queries the master clock and passes the results in the TimeContext parameter (of type HW_TIME_CONTEXT) of the callback. In particular, it sets the Time member of this structure to the time value requested in the TimeFunction parameter, the current system time in the SystemTime member of the same structure, and the minidriver's device extension in the HwDeviceExtension member of that structure.

The class driver deallocates the HW_TIME_CONTEXT structure after the clock callback routine terminates, so the callback must store any information the minidriver wishes to maintain. For that purpose, the callback routine may use previously-allocated space in either the minidriver's device extension (TimeContext->HwDeviceExtension), or the stream extension of the stream that queried its master clock (TimeContext->HwStreamObject->HwStreamExtension).

On rare occasions, the graph manager switches the master clock. The class driver exposes a race condition in handling the new master clock. If the minidriver calls a stream class master clock routine immediately after it receives a new clock from the class driver, the class driver may produce unexpected results.

Requirements

Requirement Value
Target Platform Desktop
Header strmini.h (include Strmini.h)
Library Stream.lib

See also

HW_TIME_CONTEXT

StrMiniReceiveStreamControlPacket

StreamClassQueryMasterClockSync