структура 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 = 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 = 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,...
Однако если драйвер переключается между обычной и половинной скоростью (значениями из перечисления 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 инверсной телецинии, 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-е поле)
-[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_STREAM_STATE_FRAME_FORMAT_DATA