Access High-FPS-Kamera auf Android

Es gibt Telefone mit offizieller Unterstützung für High-FPS-Aufnahmen, wie das Galaxy S5 und S6. Ich habe beide ausprobiert, mit beiden kannst du mit der Standard-Kamera-App Videos mit hohen Bildern pro Sekunde (60 oder sogar 120 Bilder pro Sekunde) aufnehmen. (Oder auf dem S6 mit der "Passthrough Camera" -Funktion von Gear VR.) ABER: Wenn Sie die Kamerafunktionen über die Standard-Android-APIs abfragen (Sie haben es auf S5 unter 4.4 und 5.0 und auf S6 unter 5.1 versucht, haben Sie sowohl die alte als auch die neue ausprobiert camera2 APIs) in allen Fällen werden 30 fps als die höchsten verfügbaren gemeldet. Bedeutet dies, dass diese Telefone private proprietäre APIs verwenden, um auf Funktionen mit hoher Geschwindigkeit zuzugreifen, und dass es keine Standardmethode für den Zugriff auf Funktionen mit höherer Geschwindigkeit gibt? Ist dies das Manko des Herstellers (was sich mit zukünftigen Softwareversionen oder Telefonen ändern könnte) oder fehle ich nur etwas? Ich brauche nicht einmal Zeitlupe, nur eine Kamera mit hoher Bildrate für die Echtzeitnutzung, also wären 60 fps ausreichend.

Beispiel Ich habe versucht, Kamera-FPS in der alten Kamera-API abzufragen.

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

Das gleiche in der Kamera2-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);
}

Ich erhalte nur Bereiche: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (noch weniger Bereiche mit der alten Kamera-API).

In der camera2 API habe ich einige Methoden gefunden, um auf die Aufzeichnung von High-FPS-Kameras zuzugreifen:createConstrainedHighSpeedCaptureSession (). Die High-Speed-Videoaufnahme wird jedoch als "Bildrate> = 120 fps" definiert, sodass ich sie für 60 fps nicht einmal benötigen sollte. Auf jeden Fall habe ich diese Funktion abgefragt, aber es scheint, dass sie auf dem S6 nicht unterstützt wird. Der Code, den ich ausprobiert habe:

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

s wird angegeben, dass nur die Funktionen 0, 1, 2, 3, 5, 6 unterstützt werden. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO wäre 9.

Zu diesem Zeitpunkt ist mir ziemlich der Kopf zerbrochen, wenn Ideen, die diese Funktionen vermuten, über Standard-APIs auf diesen Telefonen nicht verfügbar sind. Jede Hilfe wird gebeten.

Ich weiß, die Frage ist ziemlich ähnlich / damit verbunden:Aufzeichnen von Videos mit hohen Bildern pro Sekunde mit der neuen Kamera-API Aber meine Frage ist allgemeiner und bezieht sich weder auf die alte noch auf die neue Kamera-API oder auf bestimmte Geräte. Ich bin auch gespannt, welche unterstützten FPS andere Flaggschiff-Geräte über die Standard-APIs melden, da ich sie nur auf 3 Geräten testen konnte.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage