Отображение живого видео из исходного несжатого байтового источника в формах C #: WPF и Win

У меня есть живой 16-битный видеопоток серой шкалы, который проталкивается через кольцевой буфер в памяти в виде необработанного несжатого байтового потока (2 байта на пиксель, 2 ^ 18 пикселей / кадр, 32 кадра / с). (Это с камеры научного уровня, через фрейм-граббер PCI). Я хотел бы сделать некоторую простую обработку видео (обрезать динамический диапазон, раскрасить, добавить наложения), а затем показать его в окне, используя C #.

У меня это работает с использованием Windows Forms & GDI (для каждого кадра создайте объект Bitmap, запишите необработанные значения 32-битных пикселей RGB на основе моих шагов постобработки, а затем нарисуйте кадр с помощью класса Graphics). Но при этом используется значительная часть процессора, которую я хотел бы использовать для других целей. Поэтому я заинтересован в использовании WPF для отображения видео с GPU-ускорением. (Я также хотел бы начать использовать WPF для его привязки данных и функций макета.)

Но я никогда раньше не использовал WPF, поэтому не уверен, как к этому подойти. Большая часть того, что я нахожу в Интернете о видео и WPF, включает чтение сжатого видеофайла с диска (например, WMV) или получение потока с камеры бытового уровня с использованием слоя драйверов, который Windows уже понимает. Так что это, похоже, здесь не применимо (но поправьте меня, если я ошибаюсь по этому поводу).

Итак, мои вопросы:

Существует ли простой, основанный на WPF способ воспроизведения видео из необработанных, несжатых байтов в памяти (даже если это 8-битная шкала серого или 24-битная RGB)?

Нужно ли мне создавать фильтры DirectShow (или другие вещи DirectShow / Media Foundation-ish), чтобы заставить постобработку работать на GPU?

Также приветствуются любые общие советы / предложения по документации, примерам, блогам и т. Д., Которые соответствуют этим задачам. Спасибо!

Следовать за: После некоторых экспериментов я нашелWriteableBitmap чтобы быть достаточно быстрым для моих нужд и чрезвычайно простым в использовании правильно: просто позвонитеWritePixels() и любойImage связанные с ним элементы управления будут обновляться.InteropBitmap с отображенными в память разделами заметно быстрее, но мне пришлось написать p / вызывает ядро32.dll, чтобы использовать его в .NET 3.5.

Ответы на вопрос(2)

Ваш ответ на вопрос