3

我有一个使用CameraAPI 的 RA 应用程序,我想集成Camera2.

是否存在获取每个预览帧以将其发送到 JMonkeyEngine 的等效项?

这是我使用CameraAPI 的代码:

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);
        }
    }
};

我需要的是获取帧以将它们提供给 JME。

4

0 回答 0