Поделиться через


структура 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 и один из следующих типов поверхностей; в противном случае функция VideoProcessBlt HD драйвера возвращает ошибку.

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

    OutputIndex = 0, 0,...

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

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

  • Чередуемый формат с нормальной скоростью:

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

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

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

  • Перемешанный с 4/5 пользовательской скоростью (3:2 инверсной телецинии, OutputFrames=4):

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

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

    InputFrameOrField = 0, 1, 2,...

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

    InputFrameOrField = 0, 2, 4,...

  • Перекрестный формат с 4/5 настраиваемой скоростью (3:2 инверсной телецинии, OutputFrames=4 и InputFrameOrField=10):

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

  • Перекрестный формат с 4/15 настраиваемой скоростью (8:7 инверсной телецинии, OutputFrames=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 и элементов массива массива в темпоральных порядках от старых до более новых кадров непрерывно. Например, порядок элементов в массивах, как показано в следующем примере:

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 инверсной телецинии, OutputFrames=4 и InputFrameOrField=10):

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

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

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

  • Перекрестный формат с 4/15 настраиваемой скоростью (8:7 инверсной телецинии, OutputFrames=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 (include D3dumddi.h)

См. также

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD