グーグルでは、私はthis informationを持っています。私のカメラでアンドロイドデバイスの高フレームレートビデオを記録できるようにするには、カメラのAPIを呼び出すためのデバイスベンダーによって特定のパラメータを設定する必要があります。APIレベルでアンドロイドデバイスによってサポートされる最大のfpsを知るにはどうすればよいですか?
たとえば、以下のようなメソッドを呼び出すことで、Galaxy S6カメラのアプリで120 fpsを記録できるようになりました。
camera = Camera.open();
Camera.Parameters parms = camera.getParameters();
// for 120fps
parms.set("fast-fps-mode", 2); // 2 for 120fps
parms.setPreviewFpsRange(120000, 120000);
しかし、問題は(LG、および他のベンダーを含む)すべてのデバイスは、120のFPS(またはそれ以上)をサポートしていないです。だから私はエラー処理のために私のカメラアプリを実行するときにリアルタイムでAPIレベルの最大fpsを知る必要があります。
私の場合、Camera.Parameters.getSupportedPreviewFpsRange()は私のために働いていません。 120000(120 fps)で記録できる場合でも、最大30000(30fpsの意味)を返します。高フレームレート(30fps以上)での録画はカメラのハードウェアプロパティと強く関連しているため、ベンダー固有のAPIを呼び出す必要があるからです。
APIレベルでカメラデバイスで最大のfpsを得る一般的な方法はありますか?
----------------------編集----------------------
API21(LOLLIPOP)では、StreamConfigurationMapを使用して高速fps記録の最大値を取得できました。使用方法は次のとおりです。
CameraManager manager = (CameraManager)activity.getSystemService(Context.CAMERA_SERVICE);
String cameraId = manager.getCameraIdList()[0];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Range<Integer>[] fpsRange = map.getHighSpeedVideoFpsRanges(); // this range intends available fps range of device's camera.
上記のAPI21(Lollipop)より、Camera2 APIは、デバイスの能力がREQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEOの場合、以下のように、サポートされているfpsの範囲を取得できる方法を提供します。範囲 [] ranges = map.getHighSpeedVideoFpsRanges(); –
フロントカメラなどでfpsを取得できません。ストリングcameraId = manager.getCameraIdList()[1]; – ashishdhiman2007
@ ashishdhiman2007フロントカメラからfpsを取得できない場合は、上記のコードがうまく機能しない可能性が2つあります。 1.フロントカメラがFULL_LEVELではありません。 Lollipopから、Camera2 APIは3つのレベル(FULL、LEGACY、LIMITED)でカメラを分類します。 2.フロントカメラはFULL_LEVELですが、高速fps録画はサポートしていません。上記のコードは、カメラ(前面または背面を向いている)が高速fps記録をサポートしている間、正しく動作しています。 –