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 его не увидит.

Идеи?
Re: MSVAD с поддержкой MEDIASUBTYPE_IEEE_FLOAT
От: Videoman Россия https://hts.tv/
Дата: 15.07.17 13:09
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

V>Если просто заменить KSDATAFORMAT_SUBTYPE_PCM на KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, драйвер установиться, но DirectShow его не увидит.


V>Идеи?


В драйверах, с этим, дела не имел, но, например, в DirectShow с таким типом тоже никто не соединится. Может быть тут по аналогии нужно: тип у IEEE_FLOAT все-равно PCM всегда указывается ( KSDATAFORMAT_SUBTYPE_PCM) а вот уже вместо WaveFormatEx подсовывается WAVEFORMATEXTENSIBLE и уже там указывается конкретный subtype (KSDATAFORMAT_SUBTYPE_IEEE_FLOAT).

если для AM_MEDIA_TYPE:
majortype = MEDIATYPE_AUDIO;
subtype = MEDIASUBTYPE_PCM; // (всегда для всех PCM)
//...
formattype = FORMAT_WaveFormatEx;
// а уже формат заполнить правильно с WAVEFORMATEXTENSIBLE где указывается правильный тип, например MEDIASUBTYPE_IEEE_FLOT;
IA


Может так?
Отредактировано 16.07.2017 12:14 Videoman . Предыдущая версия . Еще …
Отредактировано 15.07.2017 13:28 Videoman . Предыдущая версия .
Re[2]: MSVAD с поддержкой MEDIASUBTYPE_IEEE_FLOAT
От: Videoman Россия https://hts.tv/
Дата: 15.07.17 13:29
Оценка:
V>Нечаянно продублировал
Отредактировано 15.07.2017 23:21 Videoman . Предыдущая версия .
Re[2]: MSVAD с поддержкой MEDIASUBTYPE_IEEE_FLOAT
От: Vicul  
Дата: 16.07.17 06:54
Оценка:
V>В драйверах, с этим, дела не имел, но например в DirectShow с таким типом тоже никто не соединится. Может быть тут по аналогии нужно: тип у IEEE_FLOAT все-равно PCM всегда указывается ( KSDATAFORMAT_SUBTYPE_PCM) а вот уже вместо WaveFormatEx подсовывается WAVEFORMATEXTENSIBLE и уже там указывается конкретный subtype (KSDATAFORMAT_SUBTYPE_IEEE_FLOAT).

Спасибо идею понял, попробую натянуть это на драйвер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.