Java Code Examples for android.hardware.Camera#setPreviewCallbackWithBuffer()

The following examples show how to use android.hardware.Camera#setPreviewCallbackWithBuffer() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: CameraUtils8.java    From CSipSimple with GNU General Public License v3.0 6 votes vote down vote up
@Override
public void setCallback(VideoCaptureAndroid captureAndroid, int numCaptureBuffers,
        int bufSize,
        Camera camera) {
    // According to Doc addCallbackBuffer belongs to API level 8.
    // But it seems like it works on Android 2.1 as well.
    // At least SE X10 and Milestone
    byte[] buffer = null;
    for (int i = 0; i < numCaptureBuffers; i++) {
        buffer = new byte[bufSize];
        camera.addCallbackBuffer(buffer);
    }

    camera.setPreviewCallbackWithBuffer(captureAndroid);

    ownsBuffers = true;
}
 
Example 2
Source File: CameraSource.java    From trust-wallet-android-source with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 3
Source File: CameraSource.java    From android-vision with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    previewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (focusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                focusMode)) {
            parameters.setFocusMode(focusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + focusMode +
                    " is not supported on this device.");
        }
    }

    // setting focusMode to the one set in the params
    focusMode = parameters.getFocusMode();

    if (flashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                flashMode)) {
            parameters.setFlashMode(flashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + flashMode +
                    " is not supported on this device.");
        }
    }

    // setting flashMode to the one set in the params
    flashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));

    return camera;
}
 
Example 4
Source File: CameraSource.java    From quickstart-android with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws IOException if camera cannot be found or preview cannot be processed
 */
@SuppressLint("InlinedApi")
private Camera createCamera() throws IOException {
  int requestedCameraId = getIdForRequestedCamera(facing);
  if (requestedCameraId == -1) {
    throw new IOException("Could not find requested camera.");
  }
  Camera camera = Camera.open(requestedCameraId);

  SizePair sizePair = PreferenceUtils.getCameraPreviewSizePair(activity, requestedCameraId);
  if (sizePair == null) {
    sizePair =
        selectSizePair(
            camera,
            DEFAULT_REQUESTED_CAMERA_PREVIEW_WIDTH,
            DEFAULT_REQUESTED_CAMERA_PREVIEW_HEIGHT);
  }

  if (sizePair == null) {
    throw new IOException("Could not find suitable preview size.");
  }

  previewSize = sizePair.preview;
  Log.v(TAG, "Camera preview size: " + previewSize);

  int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
  if (previewFpsRange == null) {
    throw new IOException("Could not find suitable preview frames per second range.");
  }

  Camera.Parameters parameters = camera.getParameters();

  Size pictureSize = sizePair.picture;
  if (pictureSize != null) {
    Log.v(TAG, "Camera picture size: " + pictureSize);
    parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
  }
  parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
  parameters.setPreviewFpsRange(
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
  // Use YV12 so that we can exercise YV12->NV21 auto-conversion logic for OCR detection
  parameters.setPreviewFormat(IMAGE_FORMAT);

  setRotation(camera, parameters, requestedCameraId);

  if (requestedAutoFocus) {
    if (parameters
        .getSupportedFocusModes()
        .contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
    } else {
      Log.i(TAG, "Camera auto focus is not supported on this device.");
    }
  }

  camera.setParameters(parameters);

  // Four frame buffers are needed for working with the camera:
  //
  //   one for the frame that is currently being executed upon in doing detection
  //   one for the next pending frame to process immediately upon completing detection
  //   two for the frames that the camera uses to populate future preview images
  //
  // Through trial and error it appears that two free buffers, in addition to the two buffers
  // used in this code, are needed for the camera to work properly.  Perhaps the camera has
  // one thread for acquiring images, and another thread for calling into user code.  If only
  // three buffers are used, then the camera will spew thousands of warning messages when
  // detection takes a non-trivial amount of time.
  camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));

  return camera;
}
 
Example 5
Source File: CameraSource.java    From particle-android with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws IOException if camera cannot be found or preview cannot be processed
 */
@SuppressLint("InlinedApi")
private Camera createCamera() throws IOException {
  int requestedCameraId = getIdForRequestedCamera(facing);
  if (requestedCameraId == -1) {
    throw new IOException("Could not find requested camera.");
  }
  Camera camera = Camera.open(requestedCameraId);

  SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
  if (sizePair == null) {
    throw new IOException("Could not find suitable preview size.");
  }
  Size pictureSize = sizePair.pictureSize();
  previewSize = sizePair.previewSize();

  int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
  if (previewFpsRange == null) {
    throw new IOException("Could not find suitable preview frames per second range.");
  }

  Camera.Parameters parameters = camera.getParameters();

  if (pictureSize != null) {
    parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
  }
  parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
  parameters.setPreviewFpsRange(
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
  parameters.setPreviewFormat(ImageFormat.NV21);

  setRotation(camera, parameters, requestedCameraId);

  if (requestedAutoFocus) {
    if (parameters
        .getSupportedFocusModes()
        .contains(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
      parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
      Log.i(TAG, "Autofocus enabled!");
    } else {
      Log.i(TAG, "Camera autofocus is not supported on this device.");
    }
  }

  camera.setParameters(parameters);

  // Four frame buffers are needed for working with the camera:
  //
  //   one for the frame that is currently being executed upon in doing detection
  //   one for the next pending frame to process immediately upon completing detection
  //   two for the frames that the camera uses to populate future preview images
  //
  // Through trial and error it appears that two free buffers, in addition to the two buffers
  // used in this code, are needed for the camera to work properly.  Perhaps the camera has
  // one thread for acquiring images, and another thread for calling into user code.  If only
  // three buffers are used, then the camera will spew thousands of warning messages when
  // detection takes a non-trivial amount of time.
  camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));

  return camera;
}
 
Example 6
Source File: CameraSource.java    From Bluefruit_LE_Connect_Android with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 7
Source File: CameraSource.java    From android-vision with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    previewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (focusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                focusMode)) {
            parameters.setFocusMode(focusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + focusMode +
                    " is not supported on this device.");
        }
    }

    // setting focusMode to the one set in the params
    focusMode = parameters.getFocusMode();

    if (flashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                flashMode)) {
            parameters.setFlashMode(flashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + flashMode +
                    " is not supported on this device.");
        }
    }

    // setting flashMode to the one set in the params
    flashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));

    return camera;
}
 
Example 8
Source File: CameraUtils8.java    From CSipSimple with GNU General Public License v3.0 4 votes vote down vote up
@Override
public void unsetCallback(Camera camera) {
    camera.setPreviewCallbackWithBuffer(null);
}
 
Example 9
Source File: CameraSource.java    From android-vision with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode +
                " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode +
                " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 10
Source File: CameraSource.java    From esp-idf-provisioning-android with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes() != null) {
            if (parameters.getSupportedFlashModes().contains(
                    mFlashMode)) {
                parameters.setFlashMode(mFlashMode);
            } else {
                Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
            }
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 11
Source File: CameraSource.java    From flutter_barcode_scanner with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes() != null) {
            if (parameters.getSupportedFlashModes().contains(
                    mFlashMode)) {
                parameters.setFlashMode(mFlashMode);
            }
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 12
Source File: CameraSource.java    From fast_qr_reader_view with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws IOException if camera cannot be found or preview cannot be processed
 */
@SuppressLint("InlinedApi")
private Camera createCamera() throws IOException {
  int requestedCameraId = getIdForRequestedCamera(facing);
  if (requestedCameraId == -1) {
    throw new IOException("Could not find requested camera.");
  }
  Camera camera = Camera.open(requestedCameraId);

  SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
  if (sizePair == null) {
    throw new IOException("Could not find suitable preview size.");
  }
  Size pictureSize = sizePair.pictureSize();
  previewSize = sizePair.previewSize();

  int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
  if (previewFpsRange == null) {
    throw new IOException("Could not find suitable preview frames per second range.");
  }

  Camera.Parameters parameters = camera.getParameters();

  if (pictureSize != null) {
    parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
  }
  parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
  parameters.setPreviewFpsRange(
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
  parameters.setPreviewFormat(ImageFormat.NV21);

  setRotation(camera, parameters, requestedCameraId);

  if (requestedAutoFocus) {
    if (parameters
        .getSupportedFocusModes()
        .contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
    } else {
      Log.i(TAG, "Camera auto focus is not supported on this device.");
    }
  }

  camera.setParameters(parameters);

  // Four frame buffers are needed for working with the camera:
  //
  //   one for the frame that is currently being executed upon in doing detection
  //   one for the next pending frame to process immediately upon completing detection
  //   two for the frames that the camera uses to populate future preview images
  //
  // Through trial and error it appears that two free buffers, in addition to the two buffers
  // used in this code, are needed for the camera to work properly.  Perhaps the camera has
  // one thread for acquiring images, and another thread for calling into user code.  If only
  // three buffers are used, then the camera will spew thousands of warning messages when
  // detection takes a non-trivial amount of time.
  camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));

  return camera;
}
 
Example 13
Source File: CameraSource.java    From Machine-Learning-Projects-for-Mobile-Applications with MIT License 4 votes vote down vote up
/**
 * Opens the camera and starts sending preview frames to the underlying detector.  The supplied
 * surface holder is used for the preview so frames can be displayed to the user.
 *
 * @param surfaceHolder the surface holder to use for the preview frames
 * @throws IOException if the supplied surface holder could not be used as the preview display
 */
@RequiresPermission(Manifest.permission.CAMERA)
public CameraSource start(SurfaceHolder surfaceHolder) throws IOException {
    synchronized (mCameraLock) {
        if (mCamera != null) {
            return this;
        }
        try {
            previewSurfaceHolder = surfaceHolder;
            int requestedCameraId = getIdForRequestedCamera(mFacing);
            if (requestedCameraId == -1) {throw new RuntimeException("Could not find requested camera.");}

            Camera camera = Camera.open(requestedCameraId);

            Camera.Size pictureSize = getBestAspectPictureSize(camera, mContext);
            Camera.Size previewSize = getBestAspectPreviewSize(camera, mContext);
            mPreviewSize = new Size(previewSize.width, previewSize.height);
            mPictureSize = new Size(pictureSize.width, pictureSize.height);
            int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
            if (previewFpsRange == null) {throw new RuntimeException("Could not find suitable preview frames per second range.");}

            Camera.Parameters parameters = camera.getParameters();
            parameters.setPictureSize(pictureSize.width, pictureSize.height);
            parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
            parameters.setPreviewFpsRange(previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX], previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
            parameters.setPreviewFormat(ImageFormat.NV21);

            setRotation(camera, parameters, requestedCameraId);

            if (mFocusMode != null) {
                if (parameters.getSupportedFocusModes().contains(mFocusMode)) {
                    parameters.setFocusMode(mFocusMode);
                } else {
                    Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
                }
            }

            // setting mFocusMode to the one set in the params
            mFocusMode = parameters.getFocusMode();

            if (mFlashMode != null) {
                if (parameters.getSupportedFlashModes() != null) {
                    if (parameters.getSupportedFlashModes().contains(mFlashMode)) {
                        parameters.setFlashMode(mFlashMode);
                    } else {
                        Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
                    }
                }
            }

            // setting mFlashMode to the one set in the params
            mFlashMode = parameters.getFlashMode();

            camera.setParameters(parameters);

            // Four frame buffers are needed for working with the camera:
            //
            //   one for the frame that is currently being executed upon in doing detection
            //   one for the next pending frame to process immediately upon completing detection
            //   two for the frames that the camera uses to populate future preview images
            camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
            camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
            camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
            camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
            camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

            mCamera = camera;

            mCamera.setPreviewDisplay(previewSurfaceHolder);
            mCamera.startPreview();

            startBackgroundThread();
            mProcessingThread = new Thread(mFrameProcessor);
            mFrameProcessor.setActive(true);
            mProcessingThread.start();

        } catch (RuntimeException e) {
            e.printStackTrace();
            Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
            return null;
        }
    }
    return this;
}
 
Example 14
Source File: CameraSource.java    From Barcode-Reader with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes() != null) {
            if (parameters.getSupportedFlashModes().contains(
                    mFlashMode)) {
                parameters.setFlashMode(mFlashMode);
            } else {
                Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
            }
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 15
Source File: CameraSource.java    From flutter_mobile_vision with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() throws MobileVisionException {
    int requestedCameraId = getIdForRequestedCamera(facing);
    if (requestedCameraId == -1) {
        throw new MobileVisionException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
    if (sizePair == null) {
        throw new MobileVisionException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    previewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
    if (previewFpsRange == null) {
        throw new MobileVisionException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (focusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                focusMode)) {
            parameters.setFocusMode(focusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + focusMode +
                    " is not supported on this device.");
        }
    }

    // setting focusMode to the one set in the params
    focusMode = parameters.getFocusMode();

    if (flashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                flashMode)) {
            parameters.setFlashMode(flashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + flashMode +
                    " is not supported on this device.");
        }
    }

    // setting flashMode to the one set in the params
    flashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));

    return camera;
}
 
Example 16
Source File: CameraSource.java    From Document-Scanner with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }

    Camera camera;
    camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode +
                " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode +
                " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 17
Source File: CameraSource.java    From Moneycim with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode +
                " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode +
                " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 18
Source File: CameraSource.java    From Bluefruit_LE_Connect_Android_V2 with MIT License 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
Example 19
Source File: CameraSource.java    From mlkit-material-android with Apache License 2.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws IOException if camera cannot be found or preview cannot be processed.
 */
private Camera createCamera() throws IOException {
  Camera camera = Camera.open();
  if (camera == null) {
    throw new IOException("There is no back-facing camera.");
  }

  Camera.Parameters parameters = camera.getParameters();
  setPreviewAndPictureSize(camera, parameters);
  setRotation(camera, parameters);

  int[] previewFpsRange = selectPreviewFpsRange(camera);
  if (previewFpsRange == null) {
    throw new IOException("Could not find suitable preview frames per second range.");
  }
  parameters.setPreviewFpsRange(
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
      previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);

  parameters.setPreviewFormat(IMAGE_FORMAT);

  if (parameters
      .getSupportedFocusModes()
      .contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
  } else {
    Log.i(TAG, "Camera auto focus is not supported on this device.");
  }

  camera.setParameters(parameters);

  camera.setPreviewCallbackWithBuffer(processingRunnable::setNextFrame);

  // Four frame buffers are needed for working with the camera:
  //
  //   one for the frame that is currently being executed upon in doing detection
  //   one for the next pending frame to process immediately upon completing detection
  //   two for the frames that the camera uses to populate future preview images
  //
  // Through trial and error it appears that two free buffers, in addition to the two buffers
  // used in this code, are needed for the camera to work properly. Perhaps the camera has one
  // thread for acquiring images, and another thread for calling into user code. If only three
  // buffers are used, then the camera will spew thousands of warning messages when detection
  // takes a non-trivial amount of time.
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));
  camera.addCallbackBuffer(createPreviewBuffer(previewSize));

  return camera;
}
 
Example 20
Source File: CameraSource.java    From VehicleInfoOCR with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Opens the camera and applies the user settings.
 *
 * @throws IOException if camera cannot be found or preview cannot be processed
 */
@SuppressLint("InlinedApi")
private Camera createCamera() throws IOException {
    int requestedCameraId = getIdForRequestedCamera(facing);
    if (requestedCameraId == -1) {
        throw new IOException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, requestedPreviewWidth, requestedPreviewHeight);
    if (sizePair == null) {
        throw new IOException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    previewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, requestedFps);
    if (previewFpsRange == null) {
        throw new IOException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }
    parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (requestedAutoFocus) {
        if (parameters
                .getSupportedFocusModes()
                .contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        } else {
            Log.i(TAG, "Camera auto focus is not supported on this device.");
        }
    }

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    //
    // Through trial and error it appears that two free buffers, in addition to the two buffers
    // used in this code, are needed for the camera to work properly.  Perhaps the camera has
    // one thread for acquiring images, and another thread for calling into user code.  If only
    // three buffers are used, then the camera will spew thousands of warning messages when
    // detection takes a non-trivial amount of time.
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));
    camera.addCallbackBuffer(createPreviewBuffer(previewSize));

    return camera;
}