Как мы знаем, мы можем выбрать TextureView, SurfaceView и GLSurfaceView для предварительного просмотра камеры Android.
Какой из них лучше всего подходит для предварительного просмотра камеры? Я сосредоточен на производительности камеры.
Как мы знаем, мы можем выбрать TextureView, SurfaceView и GLSurfaceView для предварительного просмотра камеры Android.
Какой из них лучше всего подходит для предварительного просмотра камеры? Я сосредоточен на производительности камеры.
С точки зрения производительности SurfaceView является победителем.
В SurfaceView кадры поступают с камеры и пересылаются в компоновщик системной графики (SurfaceFlinger) без копирования. В большинстве случаев любое масштабирование будет выполняться процессором дисплея, а не графическим процессором, а это означает, что вместо однократного сканирования пикселей для масштабирования и повторного сканирования, они сканируются только один раз.
GLSurfaceView — это SurfaceView с некоторыми классами-оболочками, которые обрабатывают настройку EGL и управление потоками. Вы не можете использовать OpenGL ES на Surface, который получает кадры с камеры, поэтому вы выполняете дополнительную работу без какой-либо пользы. (Накладные расходы связаны с незначительной разовой настройкой, а не на каждый кадр, поэтому вы, скорее всего, не сможете измерить разницу.)
TextureView получает кадры в SurfaceTexture как «внешнюю» текстуру OpenGL ES, а затем использует GLES для их визуализации на поверхности пользовательского интерфейса приложения. Масштабирование и рендеринг выполняются графическим процессором, а затем результат передается в SurfaceFlinger. Это самый медленный вариант, но и самый гибкий из представлений.
Если вы хотите узнать больше о том, как работает система, см. документ Android Graphics Architecture< /а>.
" SurfaceView создает новое окно в оконной системе Android. Его преимущество в том, что если SurfaceView обновится, будет обновлено только это окно. Если вы дополнительно обновите элементы пользовательского интерфейса (которые находятся в другом окне оконной системы), то оба обновления операции блокируют себя (особенно когда отрисовка пользовательского интерфейса поддерживается аппаратно), потому что opengl не может правильно обрабатывать многопоточную отрисовку.
В таком случае может быть лучше использовать TextureView, потому что это не другое окно Android Windowsystem. поэтому, если вы обновите свой вид, все элементы пользовательского интерфейса также будут обновлены. (Наверное) все в одном потоке.
Надеюсь, я смог помочь некоторым из вас! Источник: stackoverflow.com
GLSurfaceView — это SurfaceView с классом-оболочкой, который выполняет всю настройку EGL и обмен сообщениями между потоками за вас.
Это полностью зависит от вас, что вы используете. У них есть свои плюсы и минусы друг перед другом :)