Я делаю проект Android, посвященный работе с видеокадром, мне нужно обработать каждый кадр, прежде чем отображать его. Процесс включает в себя масштабирование кадров с разрешения 1920x1080 до разрешения 2560x1440, преобразование цветового пространства и некоторую необходимую обработку изображения на основе RGB, и все эти работы должны быть завершены в течение 33–40 мс.
Я оптимизировал yuv->rgb и другую обработку с помощью неона руки, они работали хорошо. Но мне нужно сначала масштабировать кадр с разрешения 1080p до 2k, сейчас это узкое место производительности.
Мой вопрос заключается в том, как эффективно масштабировать изображение с разрешения 1080p до разрешения 2k за 20 мс, у меня нет большого опыта работы с алгоритмом масштабирования, поэтому любые предложения полезны. Могу ли я использовать неоновую руку для оптимизации существующего алгоритма?
Аппаратная среда:
- Процессор: Samsung Exynos 5420
- Память: 3 ГБ
- Дисплей: 2560X1600 пикселей
Обновление:
Я опишу свой процесс декодирования, я использую MediaCodec для декодирования обычного видео (H.264) в YUV (NV12), декодер по умолчанию аппаратный, он очень быстрый. Затем я использую arm neon для преобразования NV12 в RGBW, а затем отправляю кадр RGBW в Surfaceflinger для отображения. Я просто использую обычный SurfaceView вместо GLSurfaceView.
Узким местом является то, как быстро масштабировать YUV с 1080p до 2K.