Хорошо, как указывает interjay ... вы почти все делаете "правильным" способом.
Очевидные улучшения - это один раз вызвать CreateRenderTarget и CreateOffscreenPlainSurface, а затем повторно использовать их несколько раз.Самый быстрый способ вернуть биты обратно - это непосредственно заблокировать поверхность.
Более того, если вам нужно сделать это в реальном времени на чем-то похожем на видео, вероятно, было бы лучше настроить массивповерхности (оба типа).Затем вы можете загрузить несколько YUV-кадров на поверхность CreateRenderTarget, а затем, как только вы заполните массив, скопировать первый в OffscreenPlainSurface и заблокировать его.
Таким образом вы разрешите конвейеризацию большего количества команд и прекратите вызывать блокировку и ФОРМИРОВАТЬ синхронизацию конвейера (т. Е. Поверхность, которую вы блокируете, ДОЛЖНА быть готова перед продолжением, что вызывает синхронизацию конвейера).