структура 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 = 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 = 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,...
Однако если драйвер переключается между обычной и половинной скоростью (значения из перечисления DXVAHDDDI_OUTPUT_RATE ), драйвер не должен требовать сброс.
Если элементы OutputIndex и InputFrameOrField остаются неизменными при следующей обработке, драйвер определяет, что кадр не изменяется (например, приостановлен) в обработке потока. Таким образом, драйвер может оптимизировать кадр, используя кэшированные данные.
Драйвер должен вернуться к менее интенсивному методу обработки видео, так как предоставляется меньше опорных кадров. Если эталонные примеры не предоставлены, драйвер должен вернуться к отмене чередование Боба.
Приложение может предоставлять меньше прошлых и будущих опорных кадров, чем эталонные кадры, запрашиваемые драйвером. Например, приложение может предоставлять меньше опорных кадров в следующих условиях:
- В начале или в конце последовательности кадров.
- Переход между прогрессивным и чередованием.
- Обычный или половинный прогрессивный поток.
- Вложенные видеопотоки, для которых не требуется высококачественное рассеяние.
- При регулировании опорных кадров для восстановления после удаления кадров и поддержания частоты кадров.
- Кадр удаляется из входных данных (например, кадр удаляется в декодере).
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-е поле)
-[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_STREAM_STATE_FRAME_FORMAT_DATA