Вам нужно как-то кешировать ~ 30 буферов предварительного просмотра.
Один из возможных способов - это использовать ImageReader, где вы ожидаете 30 обратных вызовов onImageAvailable, чтобы сработать, прежде чем вы получите первое изображение. Но для этого необходимо нарисовать изображение самостоятельно в PreviewView TextureView, как только вы начнете их получать, что трудно сделать правильно до использования ImageReader в Android Q с конструктором флагов использования.
Вы также можете кэшировать вещи в OpenGL; используйте SurfaceTexture и GLSurfaceView и скопируйте кадры SurfaceTexture в список из 30 других текстур в круговом буфере, затем начните рендеринг, когда будет нарисован 30-й. Но для реализации требуется совсем немного кода скаффолдинга.