Производительность Windows Mobile и DirectShow - PullRequest
3 голосов
/ 30 июня 2010

В настоящее время я создаю приложение, которое представляет собой фильтр изображений, который должен работать в режиме реального времени.Это фильтр, который преобразует изображение, снятое с камеры, и отображает преобразованное изображение точно так же, как при предварительном просмотре с камеры.

Проблема, с которой я сталкиваюсь, заключается в том, что производительность является критически важной для этого приложения, так как каждое снятое изображениепиксель должен быть преобразован, это дает около 640x480 пикселей x3 (размеры цвета; R, G, B) x около 30-50 операций на измерение цвета, затем преобразует его обратно в RGB и генерирует новое изображение.

Во-первых, когда я тестировал функциональные требования алгоритма в Matlab, для преобразования изображения 600x600 на четырехъядерном процессоре потребовалось около 5-15 секунд.Затем я переопределил алгоритм в целевой платформе C ++ для Windows Mobile, и теперь при обработке одного и того же изображения я получаю примерно 0,2-0,7 кадра в секунду.

В версии C ++ уже многооптимизации, такие как предварительное кеширование и предварительный расчет значений каждого цвета и сохранение предварительно рассчитанных значений в деревьях, сокращение расстояний между данными в памяти, выполнение операций с битовыми операторами, а не сложение и умножение, когда это применимо, но производительность по-прежнему не удовлетворяла.

Я попытался выяснить узкое место всего алгоритма и начал с простого пустого TransformFilter, у которого на одном конце CaptureGraph была видеокамера, а на другом конце - ручка окна.и средство визуализации, которое должно показывать предварительный просмотр камеры без каких-либо действий.Это оказалось самым большим узким местом!

Чистый предварительный просмотр оконного приложения в Windows Mobile 6.5 давал мне в среднем 1-2 кадра в секунду, и я уверен, что это не вопрос его тестирования.на медленном телефоне.Я тестирую его на HTC Diamond 2. Он имеет ~ 530 МГц, и его приложение камеры показывает плавный предварительный просмотр со скоростью около 15-20 кадров в секунду, даже когда применяется какой-то эффект (например, BW, София), производительность предварительного просмотра очень высока.

  1. Что я делаю не так?

  2. Как получить производительность предварительного просмотра, аналогичную родному приложению камеры?

  3. Есть ли в Windows Mobile какой-либо "режим", который уменьшил бы переключение контекста и придал бы моему процессу очень высокий приоритет?

Заранее спасибо за любой ответ.

...