相机预览失败 - queueBuffer失败

时间:2011-11-08 16:55:20

标签: android android-asynctask android-camera

我正在尝试编写一个不断拍照的应用。我有一个活动和一个预览课程。我用AsyncTask类来解决这个问题。

private class CaptureTask extends AsyncTask<Boolean,Integer,Integer>
    {

        @Override
        protected Integer doInBackground(Boolean... arg0) {
            // TODO Auto-generated method stub
            while(running)
            {
                if(!takingPicture&&getPreviewState()&&!p.checkCamera())
                    takePicture();
                else if(!takingPicture&&!p.getPreviewState())
                    clearPic();
            }
            return picCounter;
        }
        protected void onPostExecute(Integer pics)
        {
            t.setText("Pics taken: "+pics);
        }

    }

这在一台设备上运行良好,一台运行CM7的摩托罗拉Droid。但是,当我在运行ACS 2.3.4的Samsung Epic上加载它时,我会一直收到以下错误,直到我退出应用程序。没有显示预览,只有黑色。

  

11-08 11:42:28.207:ERROR / CameraHardwareSec(76):ERR(int android :: CameraHardwareSec :: previewThread()):overlay queueBuffer失败   11-08 11:42:28.238:ERROR / v4l2_utils(76):错误=来自qbuf的无效参数

我已经尝试过寻找这个问题,但只发现了一些尚未解决的问题。

1 个答案:

答案 0 :(得分:1)

如果您尝试录制视频,请不要使用

mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

即使您正在使用SDK&gt; = 8

,也要设置媒体记录器

通常改为:

mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

你会停止看

  

android :: CameraHardwareSec :: previewThread()):overlay queueBuffer fail

此错误的来源是默认相机预览尺寸与MediaRecorder视频尺寸不匹配,因为当您将尺寸设为相同时错误消失:

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
parameters.setPreviewSize(camcorderProfile.videoFrameWidth, camcorderProfile.videoFrameHeight);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));