Skip to content Skip to sidebar Skip to footer

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]"