2013-02-15 13 views
11

最初のものが最初に:2つの異なるHTC Desires、2.3.3で1つ、4.0.4で1つ、次のエラーが発生します。takePictureヒープ関連のエラーで失敗します

.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 

対応PictureCallbackが、このエラーの後に呼び出されることはありません。

私が見つけることができる唯一の説明は、a)startPreviewは呼び出されていませんでした。 b)ピクチャをあまりにも速く撮ろうとする(ピクチャコールバックが呼び出される前に)。

c)の正しい使用法を設定していない/権限

私がやるA)ここで、 onResume()私の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)は私には適用しないでください1枚の画像

C):私のマニフェストの一部を使用しています。

<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"/> 

いくつかの追加コード: ここで私はtakePictureを呼び出します(ここでの記録は、AsyncTaskがtakePictureを完了した後に再び呼び出すことを許可していることに注意してください)。無関係なしかし、エラーが今まで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: 少し私のレイアウトを変更した後pictureCallbackが最終的に呼び出され、私は有効なデータ(イェーイ)を取得する、しかし、エラーが解消されません。ここに私の現在のレイアウトがあります:

<?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

問題を解決しましたか? –

+0

このコードを実行するとSDカードがマウントされていますか? http://forum.xda-developers.com/showthread.php?t=819037#6 –

+0

私はそれが正しくマウントされていると仮定して、私がsdcardに取る画像を保存しています。私はアンマウントして再マウントしようとしましたが、エラーメッセージが残っています。 –

答えて

1

私はあなたがいくつかの段階でエラーがあると言います。

この例は、 (行127+)です。私はあなたが通常あなたはこのようにあなたの説明

A)startPreviewが呼び出されなかったstartPreview()メソッドを呼び出す必要がありますあなたのSurfaceHolder.Callback、で初めてsurfaceChangedまで待機していないことを推測しています。

b)ピクチャをあまりにも速く撮ろうとする(ピクチャコールバックが呼び出される前に)。

はおそらく両方とも正しいです。

+0

それは私が現在やっていることであり、errormessageが続く。あまりに早くstartPreviewを呼び出すと、別のエラーが発生することがあります。 –

+0

フルコードを添付できますか? Android 2.3.3でHTC Desireでテストできるので、メッセージが消えない場合はハードウェアやベンダーの問題を解決できます:) – Tomo

関連する問題