title: Failed Binder Transaction when returning camera image
body: <p>I get the Failed binder transaction error in the logcat when returning the image taken with the camera from the camera intent back to the parent intent (as a byte[] using putExtra). I don't understand why, its not like its a big bitmap or anything. It only happens when i take pictures with lots of light, because then the byte[] is bigger. The error occurs when leaving the camera intent. Does anyone see a mistake in my code? </p>
  
  <p>Here is the code of the camera intent:</p>
  
  <pre><code>package example.imaging.ape;
  
  import java.io.IOException;
  import java.util.Iterator;
  import java.util.Set;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.PixelFormat;
  import android.hardware.Camera;
  import android.hardware.Camera.AutoFocusCallback;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.MotionEvent;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  import android.view.View;
  import android.view.Window;
  import android.view.WindowManager;
  import android.view.View.OnTouchListener;
  
  public class TakePicture extends Activity implements SurfaceHolder.Callback{
       Camera mCamera;
       Boolean mPreviewRunning = false;
       int imageLayoutHeight;
       int imageLayoutWidth;
  
       @Override
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
  
            //setup camera surface
            getWindow().setFormat(PixelFormat.TRANSLUCENT);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.cameralayout);
  
            SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.hist_surface_camera);
            SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();
            mSurfaceHolder.addCallback(this);
            mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            Bundle extras = getIntent().getExtras();
            imageLayoutHeight = extras.getInt("layoutHeight");
            imageLayoutWidth = extras.getInt("layoutWidth");
  
            OnTouchListener touchListener = new View.OnTouchListener() {
                 public boolean onTouch(View v, MotionEvent e) {
  
                      System.out.println("MAKING PICTURE");
                      mCamera.autoFocus(cb);             
                      return false;
                 }
            };
  
            //setup touch listener
            mSurfaceView.setOnTouchListener(touchListener);
  
       }
  
       AutoFocusCallback cb = new AutoFocusCallback() {
            public void onAutoFocus(boolean success, Camera c) {
                 c.takePicture(null, null, mPictureCallback);
            }   
       };
  
       Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
            public void onPictureTaken(byte[] imageData, Camera c) {
                 System.out.println("Picture taken, now returning");              
                 Intent resultIntent = new Intent();
                 resultIntent.putExtra("cameraImage", imageData);
                 System.out.println("put Extra");
                 setResult(Activity.RESULT_OK, resultIntent);
                 finish();           
            }
       };
  
       //initialize camera
       public void surfaceCreated(SurfaceHolder holder) {
            mCamera = Camera.open();
       }
  
       public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            if (mPreviewRunning) {
                 mCamera.stopPreview();
            }
  
            Camera.Parameters p = mCamera.getParameters();
  
            p.setPreviewSize(h, w);
            System.out.println("PreviewSize: " + h + "," + w);
            p.setPictureSize(h*3,w*3); // is around 1200x900
            p.set("rotation", 90);
            mCamera.setParameters(p);
  
            try {
                 mCamera.setPreviewDisplay(holder);
            } catch (IOException e) {
                 e.printStackTrace();
            }
  
            mCamera.startPreview();
            mPreviewRunning = true;
       }
  
       public void surfaceDestroyed(SurfaceHolder holder) {
            mCamera.stopPreview();
            mPreviewRunning = false;
            mCamera.release();
       }
  
  }
  </code></pre>
  
  <p>And here is the code that calls the camera intent:</p>
  
  <pre><code>Intent intent = new Intent(Example.this, TakePicture.class);
  intent.putExtra("layoutWidth",layoutWidth);
  intent.putExtra("layoutHeight",layoutHeight);                   
  startActivityForResult(intent,0);
  </code></pre>