структура KSMIDILOOPED_BUFFER_PROPERTY (ksmedia.h)

Структура KSMIDILOOPED_BUFFER_PROPERTY указывает запрос свойства для циклического буфера потоковой передачи и включает запрошенный размер буфера.

Синтаксис

typedef struct {
  KSPROPERTY Property;
  ULONG      RequestedBufferSize;
} KSMIDILOOPED_BUFFER_PROPERTY, *PKSMIDILOOPED_BUFFER_PROPERTY;

Members

Property

Указывает структуру KSPROPERTY , которая определяет набор свойств, идентификатор свойства и тип запроса для свойства буфера потоковой передачи.

RequestedBufferSize

Задает запрошенный размер буфера потоковой передачи в байтах. Драйвер может изменить это значение на основе ограничений системы или требований к выравниванию.

Замечания

Эта структура используется при выполнении запроса свойства KSPROPERTY_MIDILOOPEDSTREAMING_BUFFER . Он позволяет клиенту указать нужный размер буфера для циклического буфера потоковой передачи MIDI. Драйвер использует эти сведения для выделения соответствующего буфера и возвращает фактические сведения о буфере в структуре KSMIDILOOPED_BUFFER .

Вызов KSPROPERTY_MIDILOOPEDSTREAMING_BUFFER строится на стандартном KSPROPERTY, добавив запрошенный размер буфера для буфера межпроцессного цикла памяти. RequestBufferSize — это только запрос. Драйвер может увеличивать, уменьшать или настраивать размер буфера в соответствии с требованиями к оборудованию или выравниванию. Фактический размер буфера и адрес буфера возвращаются в KSMIDILOOPED_BUFFER.

Циклический механизм потоковой передачи предназначен для приложений MIDI с низкой задержкой, требующих прямого доступа к циклическому буферу для эффективной обработки данных.

Пример кода

HRESULT LoopedBufferCall(_In_ ULONG& bufferSize)
{
    KSMIDILOOPED_BUFFER_PROPERTY property {0};
    KSMIDILOOPED_BUFFER buffer{0};
    ULONG propertySize {sizeof(property)};

    property.Property.Set           = KSPROPSETID_MidiLoopedStreaming; 
    property.Property.Id            = KSPROPERTY_MIDILOOPEDSTREAMING_BUFFER;       
    property.Property.Flags         = KSPROPERTY_TYPE_GET;
    property.RequestedBufferSize    = bufferSize;

    RETURN_IF_FAILED(SyncIoctl(
        m_Pin.get(),
        IOCTL_KS_PROPERTY,
        &property,
        propertySize,
        &buffer,
        sizeof(buffer),
        nullptr));

    bufferSize = buffer.ActualBufferSize;

    return S_OK;
}

Требования

Требование Ценность
Header ksmedia.h (include Ksmedia.h)

См. также