Android相机预览问题

时间:2010-07-21 23:30:04

标签: android camera

我正在编写一个程序来研究Android Camera功能。 现在,我有一些关于相机预览操作的问题:

我的程序将在主活动(ActivityMain)的onCreate()函数中创建一个surfaceview对象,然后将其设置为内容。

    super.onCreate(savedInstanceState);

    m_surface = new MyCameraSurface(this);        
    // remove title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);        
    setContentView(m_surface);

然后在surfaceChanged()运行时调用startPreview()。

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    Log.d(TAG, "*** surfaceChanged >>>>> ***");
    Log.d(TAG, "format=" + format + ", width=" + width + ", height=" + height);

    if(m_control.IsCameraClosed() == false) {
        if(m_control.IsPreviewRun() == false) {             
            m_control.startPreview();
        }
    }

    Log.d(TAG, "*** surfaceChanged <<<<< ***");
}

我的问题是:在开始时我的程序总是收到“GetNextPreviewFrame错误/ 1帧:0x0,缓冲区:0x0”错误:

07-22 06:47:46.727: DEBUG/MyCameraSurface(2313): *** surfaceChanged <<<<< ***
07-22 06:47:46.735: DEBUG/SurfaceFlinger(1276): commiting overlay changes
07-22 06:47:46.735: INFO/TIOverlay(1276): Nothing to do!
07-22 06:47:46.735: INFO/ActivityManager(1276): Displayed activity com.hykwok.CameraEffect/.ActivityMain: 7866 ms (total 7866 ms)
07-22 06:47:47.792: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:48.477: DEBUG/dalvikvm(1276): GC freed 2299 objects / 119216 bytes in 143ms
07-22 06:47:48.793: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:49.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:50.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0

但是,当我切换到另一个活动(ActivityCameraSetting)然后返回主活动时,输出变得正常。

有人可以给我一些修改建议吗?

我正在使用摩托罗拉里程碑。固件版本为2.1-update1,内部版本号为SHOLS_U2.02.36.0。

我不确定其他Android手机是否有这个问题。

另一个问题是: 是否可以通过预览回调函数获取预览帧数据而无需设置surfaceview holder?

感谢您的帮助。

可以从这里下载源代码:

Source codes link

1 个答案:

答案 0 :(得分:0)

如果没有更多的日志,很难确切地知道问题是什么,我猜想基于0x0位你的表面还没有完全创建或者相机预览尺寸设置不正确。我要提出的一个建议是添加:

m_holder.setFormat(PixelFormat.OPAQUE);

到你的MyCameraSurface构造函数。我得到了一些类似的模糊错误:CameraHal似乎解决了大部分问题。你可以发布更多的日志吗?