2016-04-28 8 views
2

グーグルでは、私は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. 
+0

上記のAPI21(Lollipop)より、Camera2 APIは、デバイスの能力がREQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEOの場合、以下のように、サポートされているfpsの範囲を取得できる方法を提供します。範囲 [] ranges = map.getHighSpeedVideoFpsRanges(); –

+0

フロントカメラなどでfpsを取得できません。ストリングcameraId = manager.getCameraIdList()[1]; – ashishdhiman2007

+1

@ ashishdhiman2007フロントカメラからfpsを取得できない場合は、上記のコードがうまく機能しない可能性が2つあります。 1.フロントカメラがFULL_LEVELではありません。 Lollipopから、Camera2 APIは3つのレベル(FULL、LEGACY、LIMITED)でカメラを分類します。 2.フロントカメラはFULL_LEVELですが、高速fps録画はサポートしていません。上記のコードは、カメラ(前面または背面を向いている)が高速​​fps記録をサポートしている間、正しく動作しています。 –

答えて

0

あなたは次のようにAPI-21を起動CamcoderProfileを経由して、その情報を取得することができます。

for (String cameraId : manager.getCameraIdList()) { 
    int id = Integer.valueOf(cameraId); 
    if (CamcorderProfile.hasProfile(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW)) { 
    CamcorderProfile profile = CamcorderProfile.get(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW); 
    int videoFrameRate = profile.videoFrameRate; 
    //... 
    } 
} 

これはあなたに高速キャプチャをサポートする利用可能な最低のプロファイルを提供します。私はそのようなハードウェアの可能性がある場合は、そこに多くのプレLollipopデバイスがあることは疑いがあります。

+0

ありがとうございました@sichevoid。しかし、これは私のためには機能しません、私は120fps記録をサポートするGalaxy S6を試しました。どのデバイスでこのコードを試しましたか? –

+0

@SunggookKim Nexus 6Pで動作します。残念ながら、私はギャラクシーS6を試していません。 S6で他のCamcorderProfile.QUALITY_HIGH_SPEED_ *プロファイルのバリエーションを試してみることをお勧めします。 – sichevoid

+0

"QUALITY_HIGH_SPEED_"で始まる他のすべてのCamcorderProfileを試しましたが、すべて動作していませんでした。私はそれがデバイスの仕様に関連していると思う。また、API 21でこれを試してみると、元の投稿に追加したStreamConfigurationMapを使うことができると思います。 –

関連する問題