Nexus 6前置摄像头倒置

时间:2015-05-29 03:36:29

标签: android

我知道之前已经问过这个问题,但是,我找不到任何有效的解决方案。

Nexus 6前置摄像头始终显示在我的应用中。一些解决方案是使用“setDisplayOrientation”,它会在屏幕上翻转相机。但是,我们会根据frames收到的onPreviewFrame对视频进行编码。

根据Android SDK DocumentationsetDisplayOrientation实际上并未更改byte[]中的onPreviewFrame

  

这不会影响onPreviewFrame(byte [],Camera),JPEG图片或录制视频中传递的字节数组的顺序。在预览期间不允许调用此方法。

如果无法在Nexus 6中获得onPreviewFrame前置摄像头correct orientation帧,那么翻转每一帧的fastest方式是什么,而不会丢失掉落在fps。

谢谢!

3 个答案:

答案 0 :(得分:3)

Camera.setDisplayOrientation()下的代码段为我解决了这个问题。你需要尝试一下。

答案 1 :(得分:2)

我能够通过使用open cv翻转帧来解决这个问题并保持fps高。

yuvimage = opencv_core.IplImage.create(frame.getWith / 2, frame.getHeight / 2 * 3 / 2, IPL_DEPTH_8U, 1);
yuvimage.getByteBuffer().clear();
yuvimage.getByteBuffer().put(halveYUV420(frame.getData(), frame.getWidth(), frame.getHeight()));
rgbimage = opencv_core.IplImage.create(frame.getWidth / 2, frame.getHeight / 2, IPL_DEPTH_8U, 3);
rgbimage.getByteBuffer().clear();
opencv_imgproc.cvCvtColor(yuvimage, rgbimage, opencv_imgproc.CV_YUV2BGR_NV21);
opencv_core.cvFlip(rgbimage, rgbimage, 0);

答案 2 :(得分:0)

最快的方法是在GPU内部进行翻转。 在GLSurfaceView上渲染相机预览,并使用顶点着色器将图像上下翻转。 然后,使用glReadPixels获取当前帧的字节。 我不确定glReadPixels在其他手机上的性能,但在Nexus 6/5中应该会非常快。