FAQ09934:相机prevew时候出现水印问题

描述:使用基于mtk camera修改的app,发现preview时候出现水印,而在mtk自带的camera上没有该现象

解决:使用DDMS截图和layer dump工具均能发现有有水印图片出现。

比对有水印和没有水印的layer dump log,发现出问题的时候的SurfaceView:

  • Layer 0x42505008 (SurfaceView) activeBuffer=[ 720x1280: 736, 4], colorformat 是RGB565.

而正常时候的SurfaceView:

  • Layer 0x42505789 (SurfaceView) activeBuffer=[ 720x1280: 736, 5], colorformat 是RGB888.

review修改camera ap部分发现在preview时候设定的color format就是RGB565, 这里导致颜色丢失而引发水印现象。需要做如下修改:

  1. 在GLRootView.java中:

public GLRootView(Context context, AttributeSet attrs) { ......

if(USE_RGB888)

getHolder().setFormat(PixelFormat.RGB_888);

else

getHolder().setFormat(PixelFormat.RGB_565);

}

在GalleryEGLConfigChooser.java中:增加RGB888的配置:

private final int mConfigSpec565[] = new int[] {

EGL10.EGL_RED_SIZE, 5,

EGL10.EGL_GREEN_SIZE, 6,

EGL10.EGL_BLUE_SIZE, 5,

EGL10.EGL_ALPHA_SIZE, 0,

EGL10.EGL_NONE

};

private final int mConfigSpec888[] = new int[] {

EGL10.EGL_RED_SIZE, 8,

EGL10.EGL_GREEN_SIZE, 8,

EGL10.EGL_BLUE_SIZE, 8,

EGL10.EGL_ALPHA_SIZE, 0,

EGL10.EGL_NONE

};

private boolean USE_RGB888 = true;

public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {

int mConfigSpec[] = (USE_RGB888 == true)? mConfigSpec888 : mConfigSpec565;

相关推荐
lishutong10067 分钟前
直破 Android 17 大屏困局:Navigation 3 架构深度解析
android·架构
梦里花开知多少11 分钟前
AOSP Android 14 壁纸架构深度分析
android
木子予彤39 分钟前
直破 Android 17 大屏困局:Navigation 3 架构深度解析
android·android jetpack
用户416596736935541 分钟前
记一次 Compose 文本排版填坑:为什么阿拉伯文案明明空间足够却强行换行?
android
九天轩辕1 小时前
Android CI/CD 编译 AIDL 报错分析与解决
android·java·ci/cd
人民的石头1 小时前
android AI 规则匹配引擎接入
android
小手智联老徐1 小时前
Windows 下 ADB 无线调试与系统级操作指南
android·windows·adb
叶羽西2 小时前
Android15 Media框架JNI Interface调试
android
spencer_tseng2 小时前
anti-screenshot (Android + iOS)
android·ios
程序员Android2 小时前
Android 相机MFNR 拍照trace 分析
android·数码相机