По классике MSVAD обеспечивает выходящий пин с типом MEDIASUBTYPE_PCM. Хотелось бы добавить и поддержку MEDIASUBTYPE_IEEE_FLOAT.
Если "тупо" добавить туда этот тип, после сборки драйвера DirectShow видит только MEDIASUBTYPE_PCM.
Вот код:
static KSDATARANGE_AUDIO PinDataRangesStream[] =
{
{
{
sizeof(KSDATARANGE_AUDIO),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
},
MAX_CHANNELS_PCM,
MIN_BITS_PER_SAMPLE_PCM,
MAX_BITS_PER_SAMPLE_PCM,
MIN_SAMPLE_RATE,
MAX_SAMPLE_RATE
},
{
{
sizeof(KSDATARANGE_AUDIO),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
},
MAX_CHANNELS_PCM,
32,
32,
44100,
44100
}
};
static
PKSDATARANGE PinDataRangePointersStream[] =
{
PKSDATARANGE(&PinDataRangesStream[0]),
PKSDATARANGE(&PinDataRangesStream[1])
};
далее все без изменений, кроме функций, где добавлена поддержка этого нового типа:
NTSTATUS CMiniportWaveCyclicMSVAD::ValidateFormat()
NTSTATUS CMiniportWaveCyclic::PropertyHandlerProposedFormat()
Если просто заменить KSDATAFORMAT_SUBTYPE_PCM на KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, драйвер установиться, но DirectShow его не увидит.
Идеи?