Android相机预览颜色问题(交换红色和蓝色)

时间:2016-08-30 13:44:30

标签: android android-camera opengl-es-2.0 mediacodec glsurfaceview

使用GLSurfaceView在Android上渲染相机预览时,我观察到一个奇怪的视觉故障。

红色和蓝色似乎在相机预览Feed中交换 - 绿色似乎没问题。请参阅下面的屏幕截图。

enter image description here

我只是在一些设备上看到了这个问题(三星Galaxy S4的所有变种)。

只有在使用某些分辨率时才会出现毛刺 - 720x960以上是正常的,低于此值的任何东西都会出现问题(例如640x480)。

前后摄像头都出现问题。

通过更改CameraCaptureActivity.java的第185行,可以在Grafika Sample应用程序中重现此问题(假设您有三星Galaxy S4方便):

    // openCamera(1280, 720);      // change this ...
    openCamera(640, 480);      // to this

我需要将H264编码为640x480。我认为我可以通过使用更高的分辨率(相同的宽高比)解决问题,但仍然将我的编码器设置为640x480运行 - 不幸的是,这会导致可怕的块状视频输入,可能是由于重新采样。

1 个答案:

答案 0 :(得分:1)

基于试验&错误(找到线索in this answerhere)我能够发现这是由打开录制提示功能引起的:

    params.setRecordingHint(true); // this causes the problem

我还有一些宽高比问题,这些问题通过关闭来解决。因此,似乎三星已经在驱动程序或硬件级别搞砸了setRecordingHint功能。

有趣的是,如果设置了未记录的"视频大小"值,然后我能够解决问题并保持setRecordingHint打开。

    params.set("video-size", "640x480");

与以下相比,我不知道这是做什么的。

    params.setPreviewSize(640, 480);

    params.setPictureSize(640, 480);

但显然它正在产生影响。但是,由于这似乎没有文档并且关闭setRecordingHint似乎对性能没有任何影响 - 我认为应该禁用setRecordingHint。