У нас есть приложение, которое читает видеопоток GigE YUV и отображает его на экране. Благодаря профилированию мы узнали, что функция преобразования каждого кадра из YUV (UYVY) в RGB24 требует как минимум на порядок больше времени и ресурсов процессора, чем любая другая часть нашего конвейера с камеры на экран.
Используемая нами функция преобразования предоставляется поставщиком программного обеспечения GigE (Pleora) и немного быстрее нашегонаивный(неоптимизированная) реализация. Мы используем DirectShow для остальной части нашего конвейера. «Тест производительности менеджера задач» показывает для нашего потока 1080p 30fps, использование процессора 4-5%, когда мы пропускаем преобразование (и, конечно, получаем искаженное изображение), и 15-19% использования ЦП, когда мы вызываем функцию преобразования.
У нас есть следующие вопросы:
Спасибо! Эрик.
Преобразование, возможно, является хорошим кандидатом для обработки на GPU, однако что вы собираетесь делать с преобразованными данными? Если вам это нужно для дальнейшей обработки в программном обеспечении, то чтение с видеоадаптера может испортить весь выигрыш, который вы могли бы получить, перенеся обработку в графический процессор. Если вам это нужно только для презентаций, тогда вам не нужно конвертировать, вы можете доставить изображение YUV прямо на видеоадаптер и представить его таким образом (что является идеальной конфигурацией конвейера, поскольку у вас нет любое преобразование вообще).
Говоря о конвертации программного обеспечения, я не уверен в качестве конверсий, которые вы используете в данный момент, но есть высоко оптимизированные (с поддержкой SIMD) конвертации:
Все три более или менее легко подключаются к конвейеру DirectShow. Кроме того, изображения с высоким разрешением также являются хорошими кандидатами для параллельной обработки программного обеспечения.
Других решений пока нет …