3

I got a RA application using Camera API and I want to integrate Camera2.

Is an equivalent exists to get each preview frame in order to sent it to JMonkeyEngine ?

Here is my code using Camera API :

public void onResume() {
    mStopPreview = false;

    try {
        mCamera = CameraOldManager.getCamera();
        if (mCamera != null) {
            // initialize camera parameters
            CameraOldManager.initializeCameraParameters(mCameraWidth, mCameraHeight);
            CameraOldManager.setCameraDisplayOrientation(mActivity, 0, mCamera);

            preparePreviewCallbackBuffer();
            mJmeApp.setCameraVideoResolution(mCameraWidth, mCameraHeight);

            mPreview = new CameraPreview(mActivity, mCamera, mCameraCallback);
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(1, 1);
            mActivity.addContentView(mPreview, lp);
        }
    } catch (Exception e) {
        Log.e(TAG, "Exception init camera: " + e.getMessage());
    }
}

    // prepares the Camera preview callback buffers.
public void preparePreviewCallbackBuffer() {
    int pformat;
    pformat = mCamera.getParameters().getPreviewFormat();
    Log.e(TAG, "PREVIEW format: " + pformat);
    // Get pixel format information to compute buffer size.
    PixelFormat info = new PixelFormat();
    PixelFormat.getPixelFormatInfo(pformat, info);
    // The actual preview width and height.
    // They can differ from the requested width mDesiredmCameraWidth
    //mPreviewWidth = mCamera.getParameters().getPreviewSize().width;
    //mPreviewHeight = mCamera.getParameters().getPreviewSize().height;
    int bufferSizeRGB565 = mCameraWidth * mCameraHeight * 2 + 4096;
    //Delete buffer before creating a new one.
    mPreviewBufferRGB565 = null;
    mPreviewBufferRGB565 = new byte[bufferSizeRGB565];
    mPreviewByteBufferRGB565 = ByteBuffer.allocateDirect(mPreviewBufferRGB565.length);
    mCameraJMEImageRGB565 = new Image(Image.Format.RGB565, mCameraWidth,
            mCameraHeight, mPreviewByteBufferRGB565);
}


// Implement the interface for getting copies of preview frames
private final Camera.PreviewCallback mCameraCallback = new Camera.PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera c) {
        if (c != null && !mStopPreview && mJmeApp != null && mJmeApp.isFirstModelLoaded()) {
            mPreviewByteBufferRGB565.clear();
            // Perform processing on the camera preview data.
            if (mPixelFormatConversionNeeded) {
                RAUtils.yCbCrToRGB565(data, mCameraWidth, mCameraHeight,
                        mPreviewBufferRGB565);
                mPreviewByteBufferRGB565.put(mPreviewBufferRGB565);
            } else {
                mPreviewByteBufferRGB565.put(data);
            }
            mCameraJMEImageRGB565.setData(mPreviewByteBufferRGB565);
            mJmeApp.setVideoBGTexture(mCameraJMEImageRGB565);
        }
    }
};

What I need is to get frames to give them to JME.

Florian Mac Langlade
  • 1,863
  • 7
  • 28
  • 57

0 Answers0