Android摄像头预览颜色问题(红色和蓝色互换)
在Android上使用GLSurfaceView渲染相机预览时,我观察到一个奇怪的视觉故障 红色和蓝色似乎在相机预览提要中互换-绿色看起来不错。请参见下面的屏幕截图 我只在少数设备上看到这个问题(所有型号的三星Galaxy S4) 只有在使用某些分辨率时才会出现此故障-720x960以上的分辨率可以,低于此分辨率的任何分辨率都会出现问题(例如640x480) 该问题发生在前后摄像头上 通过更改CameraCaptureActivity.java的第185行,可以在Grafika示例应用程序中重现该问题(假设您手边有三星Galaxy S4):Android摄像头预览颜色问题(红色和蓝色互换),android,android-camera,opengl-es-2.0,android-mediacodec,glsurfaceview,Android,Android Camera,Opengl Es 2.0,Android Mediacodec,Glsurfaceview,在Android上使用GLSurfaceView渲染相机预览时,我观察到一个奇怪的视觉故障 红色和蓝色似乎在相机预览提要中互换-绿色看起来不错。请参见下面的屏幕截图 我只在少数设备上看到这个问题(所有型号的三星Galaxy S4) 只有在使用某些分辨率时才会出现此故障-720x960以上的分辨率可以,低于此分辨率的任何分辨率都会出现问题(例如640x480) 该问题发生在前后摄像头上 通过更改CameraCaptureActivity.java的第185行,可以在Grafika示例应用程序中重
// openCamera(1280, 720); // change this ...
openCamera(640, 480); // to this
我需要将H264编码为640x480。我想我可以通过使用更高的分辨率(相同的纵横比)来解决这个问题,但仍然将编码器设置为运行在640x480-不幸的是,这导致了一个可怕的块状视频馈送,可能是由于重新采样。基于尝试和错误(以及发现的线索和错误)我发现这是由于打开录制提示功能造成的:
params.setRecordingHint(true); // this causes the problem
我也有一些纵横比的问题,通过关闭这个解决了。因此,三星似乎在驱动程序或硬件层面上搞乱了setRecordingHint功能
有趣的是,如果设置未记录的“视频大小”值,那么我就能够解决问题并保持setRecordingHint处于启用状态
params.set("video-size", "640x480");
我不知道这是在做什么:
params.setPreviewSize(640, 480);
或
但显然,它正在产生影响。但是,由于这似乎是未记录的,并且关闭SetRecordingInt似乎不会对性能产生任何影响-我认为可以禁用SetRecordingInt。没错,当SetRecordingInt以某种分辨率设置为true时,也会导致绿屏问题。
params.setPictureSize(640, 480);