Camera.java :  » App » skylight1 » android » hardware » Android Open Source

Android Open Source » App » skylight1 
skylight1 » android » hardware » Camera.java
package android.hardware;

import static java.lang.String.format;

import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import net.nycjava.skylight1.mocks.camera.CameraEvent;
import net.nycjava.skylight1.mocks.camera.CameraParametersEvent;
import net.nycjava.skylight1.mocks.camera.CameraPreviewEvent;
import net.nycjava.skylight1.mocks.file.CameraEventStreamReader;
import android.graphics.PixelFormat;
import android.util.Log;
import android.view.SurfaceHolder;

public class Camera {

  public static interface AutoFocusCallback {
    void onAutoFocus(boolean success, Camera camera);
  }

  public static interface ErrorCallback {
    void onError(int error, Camera camera);
  }

  public static class Parameters {
    private static final Pattern previewSizePattern = Pattern.compile("preview-size=(\\d+)x(\\d+);");

    private static final Pattern previewFrameRatePattern = Pattern.compile("preview-frame-rate=(\\d+);");

    private static final Pattern previewFormatPattern = Pattern.compile("preview-format=([^;]+);");

    int pictureFormat;

    Size pictureSize;

    int previewFormat;

    int previewFrameRate;

    Size previewSize = new Size(0, 0);

    public String flatten() {
      return String
          .format(
              "jpeg-thumbnail-width=512;"
                  + "luma-adaptation=0;"
                  + "antibanding-values=off,50hz,60hz,auto;"
                  + "preview-frame-rate=%d;"
                  + "preview-size=%dx%d;"
                  + "picture-format=jpeg;"
                  + "antibanding=auto;"
                  + "jpeg-thumbnail-height=384;"
                  + "picture-size=2048x1536;"
                  + "whitebalance=auto;"
                  + "jpeg-thumbnail-quality=90;"
                  + "jpeg-quality=100;"
                  + "whitebalance-values=auto,custom,incandescent,fluorescent,daylight,cloudy,twilight,shade;"
                  + "preview-format=yuv420sp;"
                  + "rotation=0;"
                  + "effect-values=mono,negative,solarize,pastel,mosaic,resize,sepia,posterize,whiteboard,blackboard,aqua;"
                  + "nightshot-mode=0", previewFrameRate, previewSize.width, previewSize.height /*
                                                           * TODO ,
                                                           * pictureFormat ,
                                                           * previewFormat
                                                           */);
    };

    public String get(String key) {
      throw new RuntimeException("Not implemented yet.");
    };

    public int getInt(String key) {
      throw new RuntimeException("Not implemented yet.");
    };

    public int getPictureFormat() {
      throw new RuntimeException("Not implemented yet.");
    };

    public Size getPictureSize() {
      throw new RuntimeException("Not implemented yet.");
    };

    public int getPreviewFormat() {
      return previewFormat;
    };

    public int getPreviewFrameRate() {
      return previewFrameRate;
    };

    public Size getPreviewSize() {
      return previewSize;
    };

    public void remove(String key) {
      throw new RuntimeException("Not implemented yet.");
    };

    public void set(String key, int value) {
      throw new RuntimeException("Not implemented yet.");
    };

    public void set(String key, String value) {
      throw new RuntimeException("Not implemented yet.");
    };

    public void setPictureFormat(int pixel_format) {
      throw new RuntimeException("Not implemented yet.");
    };

    public void setPictureSize(int width, int height) {
      throw new RuntimeException("Not implemented yet.");
    };

    public void setPreviewFormat(int pixel_format) {
      previewFormat = pixel_format;
    };

    public void setPreviewFrameRate(int fps) {
      previewFrameRate = fps;
    };

    public void setPreviewSize(int width, int height) {
      previewSize = new Size(width, height);
    };

    public void unflatten(String flattened) {
      Matcher previewSizeMatcher = previewSizePattern.matcher(flattened);
      if (!previewSizeMatcher.find()) {
        throw new RuntimeException(format("could not find preview size in %s", flattened));
      }
      previewSize.width = Integer.parseInt(previewSizeMatcher.group(1));
      previewSize.height = Integer.parseInt(previewSizeMatcher.group(2));

      Matcher previewFrameRateMatcher = previewFrameRatePattern.matcher(flattened);
      if (!previewFrameRateMatcher.find()) {
        throw new RuntimeException(format("could not find preview frame rate in %s", flattened));
      }
      previewFrameRate = Integer.parseInt(previewFrameRateMatcher.group(1));

      Matcher previewFormatMatcher = previewFormatPattern.matcher(flattened);
      if (!previewFormatMatcher.find()) {
        throw new RuntimeException(format("could not find preview format in %s", flattened));
      }
      String previewFormatString = previewFormatMatcher.group(1);
      if (previewFormatString.contains("420")) {
        previewFormat = PixelFormat.YCbCr_420_SP;
      } else if (previewFormatString.toUpperCase().contains("RGB")) {
        previewFormat = PixelFormat.RGB_565;
      } else if (previewFormatString.toUpperCase().contains("JPEG")) {
        previewFormat = PixelFormat.JPEG;
      }
    };
  }

  public static interface PictureCallback {
    abstract void onPictureTaken(byte[] data, Camera camera);
  }

  public static interface PreviewCallback {
    abstract void onPreviewFrame(byte[] data, Camera camera);
  }

  public static interface ShutterCallback {
    abstract void onShutter();
  }

  public static class Size {
    public int height;

    public int width;

    Size(int w, int h) {
      width = w;
      height = h;
    }
  }

  final static int CAMERA_ERROR_SERVER_DIED = 100;

  final static int CAMERA_ERROR_UNKNOWN = 1;

  ErrorCallback errorCallback;

  PictureCallback pictureCallback;

  PreviewCallback previewCallback;

  AutoFocusCallback autoFocusCallback;

  Parameters parameters = new Parameters();

  private byte[] rawPictureData;

  private byte[] jPEGPictureData;

  private CameraEventStreamReader cameraEventStreamReader;

  Camera() {
  }

  Camera(InputStream aTDCInputStream) {
    cameraEventStreamReader = new CameraEventStreamReader(aTDCInputStream);
    parameters = ((CameraParametersEvent) cameraEventStreamReader.readCameraEvent()).getParameters();
  }

  void setRawPictureData(byte[] aRawPictureData) {
    rawPictureData = aRawPictureData;
  }

  void setJPEGPictureData(byte[] aJPEGPictureData) {
    jPEGPictureData = aJPEGPictureData;
  }

  public final void autoFocus(AutoFocusCallback cb) {
    autoFocusCallback = cb;
  }

  public static Camera open() {
    throw new RuntimeException("Use MockCameraFactory to obtain a Camera object.");
  }

  public final void release() {
  }

  public final void setErrorCallback(ErrorCallback cb) {
    errorCallback = cb;
  }

  public Parameters getParameters() {
    return parameters;
  }

  public void setParameters(Parameters aParameters) {
    parameters = aParameters;
  }

  public final void setPreviewCallback(PreviewCallback cb) {
    previewCallback = cb;
  }

  public final void setPreviewDisplay(SurfaceHolder holder) {
  }

  public final void startPreview() {
    if (cameraEventStreamReader != null) {
      new Thread(new Runnable() {
        public void run() {
          long startTime = System.currentTimeMillis();
          CameraEvent cameraEvent;
          while ((cameraEvent = cameraEventStreamReader.readCameraEvent()) != null) {
            long delay = cameraEvent.getTime() + startTime - System.currentTimeMillis();
            if (delay > 0L) {
              try {
                Thread.sleep(delay);
              } catch (InterruptedException e) {
                Log.e("mocks", null, e);
              }
            }

            if (cameraEvent instanceof CameraPreviewEvent) {
              CameraPreviewEvent cameraPreviewEvent = (CameraPreviewEvent) cameraEvent;
              previewCallback.onPreviewFrame(cameraPreviewEvent.getData(), Camera.this);
            } else {
              throw new RuntimeException("should not be any other type of event");
            }
          }
        }
      }).start();
    }
  }

  public final void stopPreview() {
  }

  public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg) {
    if (shutter != null) {
      shutter.onShutter();
    }
    if (raw != null) {
      raw.onPictureTaken(rawPictureData, this);
    }
    if (jpeg != null) {
      jpeg.onPictureTaken(jPEGPictureData, this);
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.