Acceder a la cámara de alta fps en Android

Hay teléfonos con soporte oficial para grabación de alta fps, como el Galaxy S5 y S6. Probé ambos, con ambos puedes grabar videos de alta fps (60 o incluso 120 fps) con la aplicación de cámara predeterminada. (O en el S6 usando la función "Cámara Passthrough" de Gear VR). PERO: cuando consulta las capacidades de la cámara a través de las API estándar de Android (lo probó tanto en S5 en 4.4 como en 5.0 y S6 en 5.1, probó tanto lo viejo como lo nuevo camera2 API) en todos los casos, 30 fps se informa como el más alto disponible. ¿Significa esto que estos teléfonos usan API privadas para acceder a capacidades de fps altas y no hay una forma estándar de acceder a fps más altos? ¿Es esta la deficiencia del fabricante (que podría cambiar con futuras versiones de software o teléfonos) o simplemente me falta algo? Ni siquiera necesito cámara lenta, solo cámara de alta velocidad de cuadro para uso en tiempo real, por lo que 60 fps serían suficientes.

Probé la muestra para consultar los fps de la cámara en la antigua API de la cámara;

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

Lo mismo en camera2 API:

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);
}

Solo obtengo rangos: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (incluso menos rangos con la antigua API de la cámara).

En camera2 API encontré algunos métodos para acceder a la grabación de cámara de alta fps:createConstrainedHighSpeedCaptureSession (). Pero define la grabación de video de alta velocidad como "velocidad de cuadro> = 120 fps", por lo que ni siquiera debería necesitarla para 60 fps. De todos modos, pregunté esta capacidad, pero parece que no es compatible con el S6. El código que probé:

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]);
    }
}

Dice que solo admite capacidades 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO sería 9.

En este punto, se me acabó si las ideas que sospechan que estas capacidades realmente no están disponibles a través de API estándar en estos teléfonos. Cualquier ayuda es apreciada.

Sé que la pregunta es bastante similar / relacionada con esto:Capture videos de alta fps con la nueva API de cámara Pero mi pregunta es más general, no específica ni a la API de cámara antigua ni a la nueva, ni a dispositivos específicos. También tengo curiosidad por saber qué soporte fps otros dispositivos emblemáticos nuevos informan a través de las API estándar, ya que solo pude probarlo en 3 dispositivos.

Respuestas a la pregunta(0)

Su respuesta a la pregunta