Работа с видеокадрами
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Несжатое видео — это последовательность растровых изображений, воспроизводимых быстро, как правило, со скоростью около 30 кадров в секунду. Так как большинство видео поступает в граф фильтра DirectShow в сжатом формате, видеопоток обычно проходит через декодер для распаковки. Многие декодеры выводят данные в формате YUV и оставляют окончательное преобразование в RGB для видеооборудования непосредственно перед отрисовкой. Если декодер использует ускорение видео DirectX, видеоустройство выполняет дополнительную работу по декодирования изображения. Таким образом, окончательное распаковка растровых изображений не может быть выполнена до тех пор, пока данные не достигнут видеоустройства.
Но для выполнения различных типов анализа, обработки или редактирования видео часто необходимо работать с несжатые растровые изображения в формате RGB или YUV, прежде чем они будут отрисованы или записаны в файл. Обычно эта работа выполняется в фильтре преобразования на основе базового класса CTransformFilter , в частности в методе Transform . Этот метод получает указатель на объект IMediaSample , который инкапсулирует видеоданные. Метод IMediaSample::GetPointer возвращает указатель на первый байт необработанных данных. Для несжатых кадров эти данные состоят из пикселей, которые могут быть доступны или изменены непосредственно фильтром. В следующих разделах приведены общие сведения, которые помогут вам эффективно работать с данными DIB таким образом.
Примечание
Вы также можете изменить биты с помощью функций GDI, GDI+, DirectDraw или Direct3D, но эти методы выходят за рамки область этой статьи.
В этом разделе рассматриваются следующие вопросы.