Accede a la cámara de alta fps en Android

Hay teléfonos con soporte oficial para la grabación de alta fps, como el Galaxy S5 y S6. He intentado ambos, con ambos se puede grabar videos de alta fps (60 o incluso 120 fps) con la aplicación de cámara por defecto. (O en el S6 usando la función "Cámara pasante" de Gear VR). PERO: cuando consulta las capacidades de la cámara a través de las API estándar de Android (probado tanto en S5 en 4.4 y 5.0 como en S6 en 5.1, intentó tanto el antiguo como el nuevo Cámara2 APIs) en todos los casos, 30 fps es reportado como el más alto disponible. ¿Significa esto que estos teléfonos usan API propietarias privadas para acceder a capacidades de alta fps y no hay una forma estándar para acceder a fps más alto? ¿Es esto el defecto del fabricante (que podría cambiar con las versiones de software o teléfonos futuros) o simplemente estoy perdiendo algo? Ni siquiera necesito cámara lenta, cámara de alta tasa de fotogramas para el uso en tiempo real, por lo que 60 fps sería suficiente.

Muestra Traté de consultar los fps de la cámara en la API de cámara antigua;

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 la cámara2 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); } 

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

En la API de camera2 encontré algunos métodos para acceder a la grabación de cámara de alta fps: createConstrainedHighSpeedCaptureSession () . Pero define la grabación de vídeo de alta velocidad como "frame rate> = 120fps", por lo que ni siquiera lo necesito para 60 fps. De todas formas me preguntó esta capacidad, pero parece que no es compatible con el S6. El código que intenté:

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

Se dice que sólo las capacidades de apoyo 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO sería 9.

En este punto, prácticamente se me acabaron las ideas que sospechaban que estas capacidades no están disponibles a través de las API estándar de estos teléfonos. Cualquier ayuda es apreciada.

Sé que la pregunta es bastante similar / relacionada con esto: Capturar videos de alta fps usando la nueva cámara API Pero mi pregunta es más general, no es específico ni a la antigua ni a la nueva cámara API, ni a dispositivos específicos. También estoy curioso de lo que apoyó fps otros nuevos dispositivos emblemáticos informe a través de las API estándar, ya que sólo podía probarlo en 3 dispositivos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.