【问题标题】:Android camera preview color issue (red and blue are swapped)Android相机预览颜色问题(红蓝互换)
【发布时间】:2016-08-30 13:44:30
【问题描述】:

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

相机预览提要中的红色和蓝色似乎互换了 - 绿色似乎还可以。请参阅下面的屏幕截图。

我只在少数设备(三星 Galaxy S4 的所有变体)上看到此问题。

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

问题出现在前后摄像头上。

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

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

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

【问题讨论】:

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


    【解决方案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。

    【讨论】:

    • 确实如此,当setRecordingHint在某些分辨率下设置为true时,也会出现绿屏问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2012-08-03
    相关资源
    最近更新 更多