MSVAD с поддержкой MEDIASUBTYPE_IEEE_FLOAT
От: Vicul  
Дата: 15.07.17 09:02
Оценка:
По классике 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 его не увидит.

Идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.