7

I wanted to create something like above, that three box, will be like a camera preview. Any idea or concept on what to do?

I tried getting instance of the camera and place it to three camerapreview objects, but i'm getting an error message, i guess, it's not allowed. here is my code:

  private CameraPreview mPreview;
  private CameraPreview mPreview2;
  private CameraPreview mPreview3;
  private FrameLayout preview;
  private FrameLayout preview2;
  private FrameLayout preview3;

    mCamera=getCameraInstance(); 
    mCamera2=getCameraInstance();
    mCamera3=getCameraInstance();

    mPreview=new CameraPreview(getApplicationContext(), mCamera);
    mPreview2=new CameraPreview(getApplicationContext(), mCamera2);
    mPreview3=new CameraPreview(getApplicationContext(), mCamera3);

    preview=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview.addView(mPreview);
    preview2=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview2.addView(mPreview2);
    preview3=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview3.addView(mPreview3);

and my getinstance code

 public static Camera getCameraInstance() {
    Camera c = null;
    try {
        c = Camera.open();
    } catch (Exception e) {
    }
    return c;
 }
She Smile GM
  • 1,322
  • 1
  • 11
  • 33
  • 2
    Maybe You can place image above camera screen, with three transparent squares? – Guntis Treulands Feb 22 '13 at 07:36
  • yah, I have thought of that too, but is there any other option other than that? – She Smile GM Feb 22 '13 at 07:46
  • 1
    I would suggest this option because it will save precious memory. Maybe it would also be possible to store camera output in buffer, and then each frame represent in each of your square images? Still I don't know other possibilities as I am an iPhone guy. – Guntis Treulands Feb 22 '13 at 07:55
  • I see, thanks for you idea though, highly appreciate it, i'll try your approach. :D – She Smile GM Feb 22 '13 at 08:15

1 Answers1

3

You can only open a given camera (front or back) once; you cannot open the camera multiple times to produce multiple preview streams. In fact, on most devices, you can't open the front and back cameras simultaneously, since the camera processing pipeline is shared between the two cameras.

To do this, you need to only open the camera once, and then split the output preview data into the three parts that you then display.

If you need to run on Android versions before 3.0 (Honeycomb), then you need to use the preview callbacks. With them, you'll get a byte[] array of YUV data for each frame that you can then crop, convert to RGB, and place in an ImageView or SurfaceView.

On Android 3.0 or later, you can use the setPreviewTexture method to pipe the preview data into an OpenGL texture, which you can then render to multiple quads in a GLSurfaceView or equivalent.

Eddy Talvala
  • 17,243
  • 2
  • 42
  • 47