+ PKSMULTIPLE_ITEM DataList;
+ PKSDATARANGE DataRange;
+ ULONG Index;
+ HRESULT hr = S_FALSE;
+
+ OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n");
+
+ DataList = (PKSMULTIPLE_ITEM)DataRanges;
+ DataRange = (PKSDATARANGE)(DataList + 1);
+
+ for(Index = 0; Index < DataList->Count; Index++)
+ {
+ BOOL bMatch = FALSE;
+
+ if (DataRange->FormatSize >= sizeof(KSDATARANGE))
+ {
+ bMatch = IsEqualGUID(DataRange->MajorFormat, GUID_NULL);
+ }
+
+ if (!bMatch && DataRange->FormatSize >= sizeof(KSDATARANGE_AUDIO))
+ {
+ bMatch = IsEqualGUID(DataRange->MajorFormat, MEDIATYPE_Audio);
+ }
+
+ if (bMatch)
+ {
+ if (IsEqualGUID(DataRange->SubFormat, m_Type->subtype) ||
+ IsEqualGUID(DataRange->SubFormat, GUID_NULL))
+ {
+ if (IsEqualGUID(DataRange->Specifier, m_Type->formattype) ||
+ IsEqualGUID(DataRange->Specifier, GUID_NULL))
+ {
+ if (!IsEqualGUID(m_Type->formattype, FORMAT_WaveFormatEx) && !IsEqualGUID(DataRange->Specifier, FORMAT_WaveFormatEx))
+ {
+ //found match
+ hr = S_OK;
+ break;
+ }
+
+ if (DataRange->FormatSize >= sizeof(KSDATARANGE_AUDIO) && m_Type->cbFormat >= sizeof(WAVEFORMATEX))
+ {
+ LPWAVEFORMATEX Format = (LPWAVEFORMATEX)m_Type->pbFormat;
+ PKSDATARANGE_AUDIO AudioRange = (PKSDATARANGE_AUDIO)DataRange;
+
+ if (Format->nSamplesPerSec >= AudioRange->MinimumSampleFrequency &&
+ Format->nSamplesPerSec <= AudioRange->MaximumSampleFrequency &&
+ Format->wBitsPerSample >= AudioRange->MinimumSampleFrequency &&
+ Format->wBitsPerSample <= AudioRange->MaximumBitsPerSample &&
+ Format->nChannels <= AudioRange->MaximumChannels)
+ {
+ // found match
+ hr = S_OK;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ DataRange = (PKSDATARANGE)(((ULONG_PTR)DataRange + DataRange->FormatSize + 7) & ~7);
+ }
+ return S_OK;