Ошибка предварительного просмотра камеры - сбой очередиBuffer - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь написать приложение, которое постоянно делает фотографии. У меня есть активность и класс предварительного просмотра. Я понял это, используя класс 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);
        }

    }

Это прекрасно работает на одном устройстве, Motorola Droid с CM7. Однако, когда я загружаю его на свой Samsung Epic с ACS 2.3.4, я получаю следующую ошибку, пока не выйду из приложения. Предварительный просмотр не показан, только черный.

11-08 11: 42: 28.207: ОШИБКА / CameraHardwareSec (76): ОШИБКА (int android :: CameraHardwareSec :: previewThread ()): сбой очереди наложенияБуфер 11-08 11: 42: 28.238: ОШИБКА / v4l2_utils (76): ошибка = неверный аргумент из qbuf

Я пытался найти эту проблему, но нашел только несколько нерешенных.

1 Ответ

1 голос
/ 28 февраля 2012

Если вы пытаетесь записать видео, не используйте

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

для настройки вашего медиа-рекордера, даже если вы работаете с SDK> = 8

Делай как обычно вместо:

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

И ты перестанешь видеть

android :: CameraHardwareSec :: previewThread ()): ошибка наложения очереди. Ошибка буфера

Источником этой ошибки является несоответствие между размером предварительного просмотра камеры по умолчанию и размером видео MediaRecorder, так как ошибка исчезает, когда вы делаете размеры одинаковыми с:

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