структура DXVAHDDDI_STREAM_DATA (d3dumddi.h)

Структура DXVAHDDDI_STREAM_DATA описывает обрабатываемый входной поток.

Синтаксис

typedef struct _DXVAHDDDI_STREAM_DATA {
  [in] BOOL              Enable;
  [in] UINT              OutputIndex;
  [in] UINT              InputFrameOrField;
  [in] UINT              PastFrames;
  [in] UINT              FutureFrames;
  [in] DXVAHDDDI_SURFACE *pPastSurfaces;
  [in] DXVAHDDDI_SURFACE InputSurface;
  [in] DXVAHDDDI_SURFACE *pFutureSurfaces;
} DXVAHDDDI_STREAM_DATA;

Члены

[in] Enable

Логическое значение, указывающее, включен ли входной поток. Число входных потоков, которые включает среда выполнения, не должно превышать число, которое драйвер задает в элементе MaxStreamStatesструктуры DXVAHDDDI_VPDEVCAPS .

[in] OutputIndex

Отсчитываемый от нуля номер индекса циклического кадра для составных выходных кадров.

[in] InputFrameOrField

Отсчитываемый от нуля номер кадра для обрабатываемых входных кадров или полей.

[in] PastFrames

Число прошлых опорных кадров. Это число не должно превышать число, которое драйвер задает в элементе PastFramesструктуры DXVAHDDDI_VPCAPS .

[in] FutureFrames

Количество будущих опорных кадров. Это число не должно превышать число, которое драйвер задает в элементе FutureFramesструктуры DXVAHDDDI_VPCAPS .

[in] pPastSurfaces

Массив DXVAHDDDI_SURFACE структур, описывающих прошлые эталонные поверхности.

[in] InputSurface

Структура DXVAHDDDI_SURFACE , описывающая поверхность ввода.

[in] pFutureSurfaces

Массив DXVAHDDDI_SURFACE структур, описывающих будущие эталонные поверхности.

Комментарии

Драйвер должен выделить поверхности, которые члены pPastSurfaces, InputSurface и pFutureSurfaces указывают в типе пула, который драйвер задает в элементе InputPoolструктуры DXVAHDDDI_VPDEVCAPS и с одним из следующих типов поверхностей. В противном случае функция VideoProcessBltHD драйвера возвращает ошибку.

  • Область видео, созданная с типом DXVAHD_SURFACE_TYPE_VIDEO_INPUT или DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE.
  • Область целевой отрисовки для декодирования, созданная с типом DXVA2_VideoDecodeRenderTarget.
  • Обычная поверхность вне экрана.
Элемент OutputIndex — это циклическое число, отсчитывающееся от нуля, которое указывает номер индекса кадра выходных данных. Драйвер использует эти выходные данные индекса для обработки видео в определенном шаблоне или цикле, особенно если драйвер выполняет деинтерлейку, преобразование частоты кадров и обратную телесину. Например, с помощью следующего шаблона выходных индексов драйвер выполняет указанную обработку видео:
  • Прогрессивный формат с нормальной и половинной скоростью:

    OutputIndex = 0, 0,...

  • Прогрессивный формат с настраиваемой скоростью 2/1 (двойное преобразование частоты кадров, OutputFrames=2):

    OutputIndex = 0, 1, 0, 1,...

  • Формат с чередованием с нормальной скоростью:

    OutputIndex = 0, 1, 0, 1,... (0: первое поле, 1: второе поле)

  • Формат с чередованием с половинной скоростью:

    OutputIndex = 0, 0,... (например, первое и второе поля смешиваются в один кадр)

  • Чередуются с настраиваемой скоростью 4/5 (3:2 обратной телесины, выходные кадры=4):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, 3:D кадр фильма)

Элемент InputFrameOrField — отсчитывающееся от нуля число, указывающее номер кадра или поля входной поверхности. Например, с помощью следующего номера поля input-frame-or-field драйвер может выполнить указанную обработку видео:
  • Прогрессивный и чередуемый формат с нормальной скоростью:

    InputFrameOrField = 0, 1, 2,...

  • Прогрессивный формат и чередование формата в два раза:

    InputFrameOrField = 0, 2, 4,...

  • Формат чередование с настраиваемой скоростью 4/5 (3:2 inverse telecine, OutputFrames=4 и InputFrameOrField=10):

    InputFrameOrField = 0, 0, 0, 0, 10, 10, 10, 10, 20, 20, 20, 20,...

  • Формат чередование с настраиваемой скоростью 4/15 (обратная телесина 8:7, выходные кадры=2 и InputFrameOrField=15):

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

Приложение должно привести к сбросу элементов OutputIndex и InputFrameOrField при изменении формата кадра или скорости вывода, чтобы драйвер смог сбросить внутреннее состояние обработки. Дополнительные сведения об изменении формата кадра или скорости вывода см. в разделе DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA и DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

Однако если драйвер переключается между обычной и половинной скоростью (значения из перечисления DXVAHDDDI_OUTPUT_RATE ), драйвер не должен требовать сброс.

Если элементы OutputIndex и InputFrameOrField остаются неизменными при следующей обработке, драйвер определяет, что кадр не изменяется (например, приостановлен) в обработке потока. Таким образом, драйвер может оптимизировать кадр, используя кэшированные данные.

Драйвер должен вернуться к менее интенсивному методу обработки видео, так как предоставляется меньше опорных кадров. Если эталонные примеры не предоставлены, драйвер должен вернуться к отмене чередование Боба.

Приложение может предоставлять меньше прошлых и будущих опорных кадров, чем эталонные кадры, запрашиваемые драйвером. Например, приложение может предоставлять меньше опорных кадров в следующих условиях:

  • В начале или в конце последовательности кадров.
  • Переход между прогрессивным и чередованием.
  • Обычный или половинный прогрессивный поток.
  • Вложенные видеопотоки, для которых не требуется высококачественное рассеяние.
  • При регулировании опорных кадров для восстановления после удаления кадров и поддержания частоты кадров.
  • Кадр удаляется из входных данных (например, кадр удаляется в декодере).
Как прошлые, так и будущие опорные кадры предоставляются в членах массива pPastSurfaces и pFutureSurfaces в временном порядке от старых к новым кадрам непрерывно. Например, порядок элементов в массивах, как показано в следующем примере:

pPastSurfaces [] = {..., T-3, T-2, T-1}

InputSurface = T

pFutureSurfaces [] = {T+1, T+2, T+3,...}

Входные и ссылочные кадры изменяют расположение из будущего расположения в предыдущее с помощью текущего расположения по мере приращения элементов OutputIndex и InputFrameOrField . Например, область ввода изменяется по мере приращения OutputIndex и InputFrameOrField , когда драйвер выполняет следующую обработку видео:

  • Прогрессивный формат с нормальной скоростью:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

    InputSurface = T, T+1, T+2,...

  • Формат с чередованием с нормальной скоростью:

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 1, 2, 3, 4, 5,...

    InputSurface = T, T, T+1, T+1, T+2, T+2,...

  • Формат с чередованием с половинной скоростью:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

    InputSurface = T, T+1, T+2,...

  • Формат чередование с настраиваемой скоростью 4/5 (3:2 inverse telecine, OutputFrames=4 и InputFrameOrField=10):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,...

    InputFrameOrField = 0, 0, 0, 0, 10, 10, 10, 10, 20, 20, 20, 20,...

    InputSurface = T, T, T, T, T+5, T+5, T+5, T+5, T+10, T+10, T+10, T+10,...

  • Формат чередование с настраиваемой скоростью 4/15 (обратная телесина 8:7, выходные кадры=2 и InputFrameOrField=15):

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

    InputSurface = T, T, T+7, T+7, T+15, T+15,... (обратите внимание, что кадр T+7 содержит 15-е поле)

В следующем примере псевдокода показано взаимодействие между приложением (APP) и драйвером (DRV) при выполнении inverse Telecine (IVTC) в раскрывающемся списке 3:2, 30 кадров (60 полей) в секунду с чередованием содержимого:
-[60i -> 60p]
DRV: VPGuid[0] requests 1 past and 2 future reference frames.
APP: Creates VPGuid[0] video processor and set output rate to normal.
APP: Decodes frame 0(A0:A1), 1(A0:B1), 2(B0:C1), 3(C0:C1), 4(D0:D1), ...
    :
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A'
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=1, OutputIndex=1
DRV: Weave [0(A1)+1(A0)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=2, OutputIndex=0
DRV: Weave [1(A0)+0(A1)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=3, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=4, OutputIndex=0
DRV: Weave [2(B0)+1(B1)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=5, OutputIndex=1
DRV: Weave [2(C1)+3(C0)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=6, OutputIndex=0
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=7, OutputIndex=1
DRV: Weave [3(C1)+3(C0)] = C
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=8, OutputIndex=0
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=9, OutputIndex=1
DRV: Weave [4(D1)+4(D0)] = D
    :
-[60i -> 24p]
DRV: VPGuid[1] requests 4 future reference frames.
DRV: Exports CustomRate=4/5, OutputFrames=4, InputInterlaced=TRUE, InputFramesOrFields=10.
APP: Creates VPGuid[1] video processor and set output rate to 4/5 custom rate.
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A' (playback or speed mode) or Weave [0(A0)+0(A1)] = A (quality mode)
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=2
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=3
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 5, 6, 7, 8, 9), InputFrameOrField=10, OutputIndex=0
DRV: Weave [0(A0)+0(A1)] = A
    :

Требования

Требование Значение
Минимальная версия клиента DXVAHDDDI_STREAM_DATA поддерживается начиная с операционной системы Windows 7.
Верхняя часть d3dumddi.h (включая D3dumddi.h)

См. также раздел

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD