2013-02-15 26 views
11

Po pierwsze: następujący błąd występuje w 2 różnych HTC Desires, jeden z 2.3.3, drugi z 4.0.4.takePicture kończy się niepowodzeniem z błędem sterty

dostaję następujące komunikaty o błędach podczas próby wywołania .takePicture:

E/MemoryHeapBase(104): error opening /dev/pmem_camera: No such file or directory 
E/QualcommCameraHardware(104): failed to construct master heap for pmem pool /dev/pmem_camera 
E/QualcommCameraHardware(104): initSnapshot X failed with pmem_camera, trying with pmem_adsp 

odpowiedniego PictureCallback nigdy nie jest wywoływana po tym błędzie.

Jedyne wyjaśnienia, jakie mogłem znaleźć, to: a) startPreview nie został wywołany; b) próba robienia zdjęć zbyt szybko (przed wywołaniem wywołania zwrotnego obrazu); c) nie ustawienie prawidłowych zastosowań/uprawnienia

zrobić a) tutaj, w onResume() mojego FullscreenActivity:

//open the camera resource 
cam = Camera.open(); 

Camera.Parameters params = cam.getParameters(); 
//change Parameters 
params.setJpegQuality(100);//best quality 
params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
//params.setZoom(2); 
List<Size> supportedPreviewSizes = cam.getParameters().getSupportedPreviewSizes(); 
params.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height); 
cam.setParameters(params); 

SurfaceView sv = (SurfaceView)this.findViewById(R.id.surfaceView1); 
SurfaceHolder mHolder = sv.getHolder(); 
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
mHolder.setSizeFromLayout(); 
mHolder.addCallback(this); 

try { 
    cam.setPreviewDisplay(mHolder); 
} catch (IOException e) { 
    Log.d(TAG, "Error setting camera preview: " + e.getMessage()); 
} 

//Log.d(TAG, "Starting Preview"); 
cam.startPreview(); 

b) nie powinno stosować się do mnie jak tylko próbować wziąć pojedynczy obraz

c) wykorzystuje-część mojego oczywistego:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="8" /> 
<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.FLASHLIGHT"/> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus"/> 
<uses-feature android:name="android.hardware.camera.flash"/> 

Jakiś dodatkowy kod:

Gdzie wywołuję takePicture (zwróć uwagę, że zapis oznacza tutaj, że AsyncTask może wywołać takePicture ponownie po zakończeniu. Bez znaczenia jednak jako błąd nie ustępuje bez kiedykolwiek wywołanie AsyncTask):

findViewById(R.id.snap_button).setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     recording = !recording; 

     Button btn = (Button)findViewById(R.id.snap_button); 
     if(recording) { 
      //update buttontext 
      btn.setText("Stop"); 
      //start recording by taking a picture 
      cam.takePicture(null,null, mPicture); 

     } else { 
      //update button text 
      btn.setText("Start"); 
     } 

    } 
}); 

EDIT: Po nieznacznie zmieniając mój UKŁAD pictureCallback wreszcie powoływać i uzyskać aktualne dane (yay), jednak błąd będzie się powtarzał. Oto mój obecny układ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <SurfaceView 
     android:id="@+id/surfaceView1" 
     android:layout_width="0dp" 
     android:layout_height="369dp" 
     android:layout_weight="1.55" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/snap_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Capture" /> 

     <ProgressBar 
      android:id="@+id/progressBar1" 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</LinearLayout> 
+1

Czy rozwiązałeś problem? –

+0

Czy masz zamontowaną kartę SD podczas wykonywania tego kodu? http://forum.xda-developers.com/showthread.php?t=819037#6 –

+0

Zapisuję zdjęcia, które wykonuję na karcie SD, aby można było założyć, że są poprawnie zamontowane. Po prostu próbowałem odłączyć i ponownie zainstalować, ale komunikat o błędzie nie zniknął. –

Odpowiedz

1

Powiedziałbym, że masz błędy w krokach.

Powinieneś spojrzeć na ten przykład: cw-android - camera preview (linia 127+). Zgaduję, że nie czekamy, aż po raz pierwszy w swojej SurfaceHolder.CallbacksurfaceChanged, gdzie zazwyczaj należy powołać startPreview() metodę, dzięki czemu twoje wyjaśnienia

a) startPreview nie został powołany;

b) próba robienia zdjęć zbyt szybko (przed wywołaniem oddzwaniania);

są prawdopodobnie poprawne.

+0

To, co obecnie robię, a errormessage trwa.Wywołanie wcześnie funkcji startPreview powoduje inny błąd. Wierzę, że –

+0

Czy możesz dołączyć pełny kod. Mogę przetestować na moim HTC Desire z systemem Android 2.3.3, dzięki czemu możemy wyeliminować problemy ze sprzętem lub sprzedawcą, jeśli komunikat będzie się powtarzał :) – Tomo

Powiązane problemy