В настоящее время я создаю приложение, которое представляет собой фильтр изображений, который должен работать в режиме реального времени.Это фильтр, который преобразует изображение, снятое с камеры, и отображает преобразованное изображение точно так же, как при предварительном просмотре с камеры.
Проблема, с которой я сталкиваюсь, заключается в том, что производительность является критически важной для этого приложения, так как каждое снятое изображениепиксель должен быть преобразован, это дает около 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, София), производительность предварительного просмотра очень высока.
Что я делаю не так?
Как получить производительность предварительного просмотра, аналогичную родному приложению камеры?
Есть ли в Windows Mobile какой-либо "режим", который уменьшил бы переключение контекста и придал бы моему процессу очень высокий приоритет?
Заранее спасибо за любой ответ.