Acesse a câmera de alta fps no Android

Existem telefones com suporte oficial para gravação em alta fps, como o Galaxy S5 e S6. Eu tentei os dois, com os dois você pode gravar vídeos em alta velocidade (60 ou até 120 qps) com o aplicativo de câmera padrão. (Ou no S6 usando a função "Câmera de passagem" do Gear VR.) MAS: quando você consulta os recursos da câmera por meio das APIs padrão do Android (tentei no S5 no 4.4 e 5.0 e no S6 no 5.1, tentei o antigo e o novo APIs camera2) em todos os casos, 30 fps é relatado como o mais alto disponível. Isso significa que esses telefones usam APIs proprietárias privadas para acessar recursos de alta fps e não há uma maneira padrão de acessar fps mais altos? É este o defeito do fabricante (que pode mudar com versões ou softwares futuros) ou apenas estou perdendo alguma coisa? Eu nem preciso de câmera lenta, apenas câmera de alta taxa de quadros para uso em tempo real, então 60 fps seria suficiente.

Exemplo que experimentei para consultar os fps da câmera na antiga API da câmera;

List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes();
List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange();
int[] c = new int[2];
camera.getParameters().getPreviewFpsRange(c);

O mesmo na API camera2:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    Range<Integer>[] fpsRange = cc.get(cc.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
}

Eu só recebo intervalos: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (intervalos ainda menores com a API da câmera antiga).

Na API camera2, encontrei alguns métodos para acessar a gravação de câmera em alta fps:createConstrainedHighSpeedCaptureSession (). Mas ele define a gravação de vídeo em alta velocidade como "taxa de quadros> = 120fps", então eu nem precisaria dela por 60 fps. Enfim, eu perguntei sobre esse recurso, mas parece que ele não é suportado no S6. O código que tentei:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    CameraCharacteristics.Key<int[]> aa = cc.REQUEST_AVAILABLE_CAPABILITIES;
    for (int i = 0; i < cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES).length; i++) {
            Log.e(TAG, "Capability: " + cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i]);
    }
}

Ele diz que apenas os recursos de suporte 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO seriam 9.

Nesse ponto, eu acabei praticamente se as idéias que suspeitassem desses recursos realmente não estivessem disponíveis nas APIs padrão desses telefones. Qualquer ajuda é apreciada.

Eu sei que a pergunta é bastante semelhante / relacionada a isso:Capture vídeos em alta velocidade usando a nova API da câmera Mas minha pergunta é mais geral, não específica nem à API da câmera antiga nem à nova, nem a dispositivos específicos. Também estou curioso para saber o que os fps suportados por outros novos dispositivos emblemáticos relatam através das APIs padrão, pois eu só podia testá-lo em três dispositivos.

questionAnswers(0)

yourAnswerToTheQuestion