Camera2 Api Frames Skip And Crash When >= 65[fps]
I'm currently developing an Android App for slow-motion recording using this project as an example. I've tried this App with a ZTE BLADE L5 PLUS (Android 5.0) and it worked just fi
Solution 1:
OK I've found a partial answer which I'm sharing with the next problem I encountered :) So what I did now was taking the QUALITY_HIGH profile as a base for my mMediaRecorder and just changed the bitRate and FrameRate trying it to record at 120 FPS just like this:
privatevoidsetupMediaRecorder() throws IOException
{
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mMediaRecorder.setOutputFormat(profile.fileFormat);
mMediaRecorder.setVideoEncoder(profile.videoCodec);
mMediaRecorder.setVideoEncodingBitRate(8000000);
mMediaRecorder.setVideoFrameRate(120);
mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
mMediaRecorder.setOutputFile(mVideoFileName);
mMediaRecorder.setOrientationHint(mTotalRotation);
try
{
mMediaRecorder.prepare();
}
catch (IOException e)
{
e.printStackTrace();
}
}
Now I'm recording videos of 30FPS wich I don't actually understand--> How can it be if I'm setting 120FPS on the MediaRecorder?
Any idea on how to get a the MediaRecorder to actually record at 120FPS?
Thanks!
Solution 2:
You need the following configuration to record at 30, 60, 90 and 120 fps.
Source:
$ git clone https://source.codeaurora.org/quic/la/camera-samples -b iot-concam-apk.lnx.1.1
privatevar streamConfigOpMode: Int = 0x00privateval HIGH_SPEED_SESSION: Int = 1
previewRequest.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, Range(previewFps, previewFps))
if (previewFps == 120) streamConfigOpMode = streamConfigOpMode or HIGH_SPEED_SESSION
Log.d(TAG, "Operation Mode: $streamConfigOpMode")
val config = SessionConfiguration(
streamConfigOpMode, outConfigurations, HandlerExecutor(cameraHandler),
object : CameraCaptureSession.StateCallback() {
overridefunonConfigured(s: CameraCaptureSession) {
if (previewFps == 120) {
Log.i(TAG, "onConfigured HFR session")
sessionHFR = s as CameraConstrainedHighSpeedCaptureSession
// if there is no active surface, do not set setRepeatingBurst.if (streamSurfaceList.isNotEmpty()) {
var requestList = sessionHFR.createHighSpeedRequestList(previewRequest.build())
sessionHFR.setRepeatingBurst(requestList, null, cameraHandler)
}
} else {
Log.i(TAG, "onConfigured session")
session = s
// if there is no active surface, do not set setRepeatingRequest.if (streamSurfaceList.isNotEmpty()) {
if ((streamSurfaceList.size == 2) && (previewFps == 60 || previewFps == 90)) {
optimizePreviewFPS(previewFps)
} else {
session.setRepeatingRequest(previewRequest.build(), null, cameraHandler)
}
}
}
isCameraReady = true
Log.i(TAG, "isCameraReady true")
}
overridefunonConfigureFailed(s: CameraCaptureSession) =
s.device.close()
})
config.sessionParameters = previewRequest.build()
camera.createCaptureSession(config)
Log.i(TAG, "createSession exit")
privatefunoptimizePreviewFPS(previewFps: Int) {
when (previewFps) {
60 -> {
var burstList = mutableListOf<CaptureRequest>()
burstList.add(previewRequest.build())
// First Surface is always display.
previewRequest.removeTarget(streamSurfaceList[0])
burstList.add(previewRequest.build())
session.setRepeatingBurst(burstList, null, cameraHandler)
previewRequest.addTarget(streamSurfaceList[0])
}
90 -> {
var burstList = mutableListOf<CaptureRequest>()
burstList.add(previewRequest.build())
// First Surface is always display.
previewRequest.removeTarget(streamSurfaceList[0])
burstList.add(previewRequest.build())
burstList.add(previewRequest.build())
session.setRepeatingBurst(burstList, null, cameraHandler)
previewRequest.addTarget(streamSurfaceList[0])
}
}
}
Post a Comment for "Camera2 Api Frames Skip And Crash When >= 65[fps]"