我知道之前已经问过这个问题,但是,我找不到任何有效的解决方案。
Nexus 6
前置摄像头始终显示在我的应用中。一些解决方案是使用“setDisplayOrientation
”,它会在屏幕上翻转相机。但是,我们会根据frames
收到的onPreviewFrame
对视频进行编码。
根据Android SDK Documentation
,setDisplayOrientation
实际上并未更改byte[]
中的onPreviewFrame
。
这不会影响onPreviewFrame(byte [],Camera),JPEG图片或录制视频中传递的字节数组的顺序。在预览期间不允许调用此方法。
如果无法在Nexus 6
中获得onPreviewFrame
前置摄像头correct orientation
帧,那么翻转每一帧的fastest
方式是什么,而不会丢失掉落在fps。
谢谢!
答案 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中应该会非常快。