функция обратного вызова PDD_VPORTCB_GETBANDWIDTH (ddrawint.h)
Функция обратного вызова DdVideoPortGetBandwidth сообщает об ограничениях пропускной способности памяти буфера кадров устройства на основе указанного формата вывода объекта VPE.
Синтаксис
PDD_VPORTCB_GETBANDWIDTH PddVportcbGetbandwidth;
DWORD PddVportcbGetbandwidth(
PDD_GETVPORTBANDWIDTHDATA unnamedParam1
)
{...}
Параметры
unnamedParam1
Указывает на структуру DD_GETVPORTBANDWIDTHDATA , содержащую сведения, необходимые драйверу для возврата данных о пропускной способности.
Возвращаемое значение
DdVideoPortGetBandwidth возвращает один из следующих кодов обратного вызова:
Комментарии
DdVideoPortGetBandwidth необходимо реализовать в драйверах DirectDraw, поддерживающих VPE.
DdVideoPortGetBandwidth информирует клиентов о требованиях к пропускной способности для любого указанного формата, помогая им выбрать формат и лучше понять его ограничения. Драйвер может предоставить точную информацию о пропускной способности только после создания объекта VPE, так как драйверу требуются сведения в структуре DDVIDEOPORTDESC .
DdVideoPortGetBandwidth обычно вызывается дважды для получения параметров пропускной способности указанного аппаратного видеопорта. В зависимости от члена dwFlags структуры DD_GETVPORTBANDWIDTHDATA в lpGetVideoPortBandwidth драйвер должен выполнять следующие действия:
-
Если флаг DDVPB_TYPE, драйвер должен указать тип устройства, установив один из следующих флагов в элементе dwCaps структуры DDVIDEOPORTBANDWIDTH , на которую указывает элемент lpBandwidth DD_GETVPORTBANDWIDTHDATA:
- DDVPBCAPS_DESTINATION указывает, что устройство будет описывать свои возможности пропускной способности с точки зрения коэффициента растяжения наложения; то есть сведения о пропускной способности, возвращаемые драйвером в следующем вызове DdVideoPortGetBandwidth , будут ссылаться на размер наложения назначения. Этот флаг лучше всего описывает оборудование, которое обновляется как с основной, так и с поверхности наложения одновременно. По мере растяжения целевого видео оборудование имеет больше времени на чтение пикселей с поверхности наложения, уменьшая требуемую пропускную способность памяти.
- DDVPBCAPS_SOURCE указывает, что устройство будет описывать свои возможности пропускной способности с точки зрения требуемого размера исходного наложения; то есть сведения о пропускной способности, возвращаемые при следующем вызове DdVideoPortGetBandwidth , относятся к размеру наложения источника. Этот флаг лучше всего описывает оборудование, которое предварительно получает данные наложения в буфер линий или большой fifo. Такое оборудование не требует дополнительной пропускной способности, но требует, чтобы исходные данные наложения полностью соответствовали размеру буфера или FIFO, поддерживаемого оборудованием.
Драйвер также должен задать член dwSize структуры DDVIDEOPORTBANDWIDTH перед возвратом.
-
Если флаг DDVPB_VIDEOPORT, элементы dwWidth и dwHeight в структуре DD_GETVPORTBANDWIDTHDATA ссылаются на предварительно масштабируемый размер видеоданных, который аппаратный видеопорт будет записывать в буфер кадров в качестве исходного наложения. Драйвер должен возвращать коэффициент растяжения наложения, при котором устройство может отображать наложение, умноженное на 1000, в каждом элементе dwOverlay, dwColorkey, dwYInterpolate и dwYInterpAndColorkey структуры DDVIDEOPORTBANDWIDTH. Например, значение 2000 указывает, что устройство имеет пропускную способность, чтобы растянуть наложение в два раза до указанного исходного размера при его отображении. Значение 1000 указывает, что для указанного размера данных не требуется растягивать. Значение 500 указывает, что устройство обладает достаточной пропускной способностью для сокращения места назначения наложения в два раза. Драйвер должен задать допустимое значение в dwOverlay, но может возвращать значение -1 в любом из трех других элементов, которые он не поддерживает.
Флаг DDVPB_VIDEOPORT предполагает, что устройство лучше всего описано флагом DDVPBCAPS_DESTINATION. Если это не так, драйвер должен завершить вызов ошибкой.
-
Если установлен флаг DDVPB_OVERLAY, элементы dwWidth и dwHeight в структуре DD_GETVPORTBANDWIDTHDATA ссылаются на размер исходного наложения. Драйвер должен возвращать процент от размера этого наложения, умноженный на 1000, при котором он может поддерживать отображение наложения в каждом элементе dwOverlay, dwColorkey, dwYInterpolate и dwYInterpAndColorkey структуры DDVIDEOPORTBANDWIDTH. Например, значение 750 указывает, что для успешного отображения устройства необходимо, чтобы указанное исходное наложение сократилось до 75 % от исходного размера. Значение 1000 указывает, что сжатие не требуется. Драйверы для устройств этого типа обычно не возвращают значение больше 1000. Драйвер должен задать допустимое значение в dwOverlay, но может возвращать значение 0 в любом из трех других элементов, если он не поддерживает ввод цветов и (или) интерполяцию по оси Y.
Флаг DDVPB_OVERLAY предполагает, что устройство лучше всего описано с помощью флага DDVPBCAPS_SOURCE. Если это не так, драйвер должен завершить вызов ошибкой.
Требования
Целевая платформа | Персональный компьютер |
Верхняя часть | ddrawint.h (включая Winddi.h) |