2010-07-21 141 views
1

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

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

super.onCreate(savedInstanceState); 

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

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

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 ),然后回到主要活动,输出就会正常。

任何人都可以给我一些建议来解决它吗?

我正在使用Motorola Milestone。固件版本为2.1-update1,内部版本号为SHOLS_U2.02.36.0。

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

另一个问题是: 是否有可能通过预览回调函数获取预览帧数据而不设置surfaceview保持器?

谢谢您的帮助。

源代码可以从这里下载:

Source codes link

+0

我遇到过摩托罗拉设备的类似问题。此外,有时候让他们的手机很容易崩溃(我的意思是,不要在Java中引发异常,但也要重置设备)。我放弃了一些棘手的解决方法。根据我的理解,这绝对是摩托罗拉相机HAL中的BUG。不过,我可以观察到这个问题仍然没有解决在Droid X.我建议你尝试其他设备(宏达电或三星) - 我要确保你的代码将工作得很好。 – sandrstar 2011-06-16 06:15:04

回答

0

很难说这个问题到底是什么没有更多的日志,我猜基础上,为0x0位,要么你的面不完全创建,或者相机预览尺寸设置不正确。我会建议的一个建议是:向您的MyCameraSurface构造函数添加:

m_holder.setFormat(PixelFormat.OPAQUE); 

。我收到了一些类似的模糊错误:CameraHal,这似乎解决了大部分错误。你可以发布更多的日志吗?