структура KS_FRAME_INFO (ksmedia.h)
Структура KS_FRAME_INFO расширяет структуру KSSTREAM_HEADER для видеопотоков.
Синтаксис
typedef struct tagKS_FRAME_INFO {
ULONG ExtendedHeaderSize;
DWORD dwFrameFlags;
LONGLONG PictureNumber;
LONGLONG DropCount;
HANDLE hDirectDraw;
HANDLE hSurfaceHandle;
RECT DirectDrawRect;
union {
LONG lSurfacePitch;
DWORD Reserved1;
};
DWORD Reserved2;
union {
struct {
DWORD Reserved3;
DWORD Reserved4;
};
ULONGLONG FrameCompletionNumber;
};
} KS_FRAME_INFO, *PKS_FRAME_INFO;
Члены
ExtendedHeaderSize
Задает размер этой структуры в байтах.
dwFrameFlags
Указывает флаги, указывающие дополнительные сведения о захваченном кадре. Во время записи мини-driver задает этому элементу одно из следующих значений, определенных в ksmedia.h:
Флаг | Значение |
---|---|
KS_VIDEO_FLAG_FRAME | Указывает полный кадр. |
KS_VIDEO_FLAG_FIELD1 | Указывает поле 1 последовательности двух полей. |
KS_VIDEO_FLAG_FIELD2 | Указывает поле 2 последовательности двух полей. |
KS_VIDEO_FLAG_I_FRAME | Указывает, что этот кадр можно полностью декодировать без ссылки на другие кадры. |
KS_VIDEO_FLAG_P_FRAME | Указывает, что это прогнозируемый кадр. |
KS_VIDEO_FLAG_B_FRAME | Указывает, что это двунаправленный кадр. |
PictureNumber
Указывает число, представляющее текущий номер рисунка. Инициализировать или обновить это значение при переходе в KSSTATE_ACQUIRE.
DropCount
Указывает количество изображений, которые не были записаны. Во время записи мини-driver задает этот элемент. Этот счетчик должен увеличиваться всякий раз, когда кадр должен быть захвачен, но не был; это условие обычно возникает, когда буферы не были доступны во время записи. Инициализировать или обновить это значение при переходе в KSSTATE_ACQUIRE.
hDirectDraw
Указывает дескриптор пользовательского режима в DirectDraw. Этот дескриптор предоставляется только мини-driver при захвате на поверхность DirectDraw для предварительного просмотра или наложения.
hSurfaceHandle
Указывает дескриптор пользовательского режима для поверхности DirectDraw. Этот дескриптор предоставляется только мини-driver при захвате на поверхность DirectDraw для предварительного просмотра или наложения.
DirectDrawRect
Указывает часть заблокированной поверхности DirectDraw. Обычно это всю поверхность.
lSurfacePitch
Содержит поверхностный шаг (также известный как шаг).
Reserved1
Зарезервировано и не должно использоваться мини-driver.
Reserved2
Зарезервировано и не должно использоваться мини-driver.
Reserved3
Зарезервировано и не должно использоваться мини-driver.
Reserved4
Зарезервировано и не должно использоваться мини-driver.
FrameCompletionNumber
Идентификационный порядковый номер кадра в завершенной очереди. Это число используется для проверки правильного порядка кадров. Если это значение равно 0, кадр был отменен.
Этот член доступен начиная с Windows 8.1.
Замечания
Структура KS_FRAME_INFO предоставляет способ возврата сведений о захваченном кадре, а также способ передачи дескрипторов Microsoft DirectDraw, используемых при захвате на поверхность DirectDraw.
Число элементов PictureNumber представляет количество текущего рисунка, которое вычисляется одним из двух способов в зависимости от устройства:
Измеряйте время начала потока и разделяйте на длительность кадра. Этот метод подходит для устройств, которые не предоставляют собственные часы. Например:
PictureNumber = ElapsedTime / FrameDuration;
Добавьте вместе количество захваченных кадров и количество удаленных кадров. Этот метод подходит для устройств, предоставляющих собственные часы. Например:
PictureNumber = FramesCaptured + FramesDropped;
При вычислении PictureNumber и DropCountважно использовать длительность кадра, указанную при открытии потока, что может не обязательно соответствовать скорости, с которой устройство фактически создает изображения. Например, USB-камера может создавать изображения только в 7,5 fps, но клиент может открыть поток на 8 fps. В этом случае все вычисления должны использовать число 8 fps.
Дополнительные сведения об обновлении PictureNumber и DropCount см. в записи видео.
Требования
Требование | Ценность |
---|---|
заголовка | ksmedia.h (include Ksmedia.h) |