Search in sources :

Example 11 with Camera

use of android.hardware.Camera in project android_frameworks_base by ResurrectionRemix.

the class CameraDeviceUserShim method connectBinderShim.

public static CameraDeviceUserShim connectBinderShim(ICameraDeviceCallbacks callbacks, int cameraId) {
    if (DEBUG) {
        Log.d(TAG, "Opening shim Camera device");
    }
    /*
         * Put the camera open on a separate thread with its own looper; otherwise
         * if the main thread is used then the callbacks might never get delivered
         * (e.g. in CTS which run its own default looper only after tests)
         */
    CameraLooper init = new CameraLooper(cameraId);
    CameraCallbackThread threadCallbacks = new CameraCallbackThread(callbacks);
    // TODO: Make this async instead of blocking
    int initErrors = init.waitForOpen(OPEN_CAMERA_TIMEOUT_MS);
    Camera legacyCamera = init.getCamera();
    // Check errors old HAL initialization
    LegacyExceptionUtils.throwOnServiceError(initErrors);
    // Disable shutter sounds (this will work unconditionally) for api2 clients
    legacyCamera.disableShutterSound();
    CameraInfo info = new CameraInfo();
    Camera.getCameraInfo(cameraId, info);
    Camera.Parameters legacyParameters = null;
    try {
        legacyParameters = legacyCamera.getParameters();
    } catch (RuntimeException e) {
        throw new ServiceSpecificException(ICameraService.ERROR_INVALID_OPERATION, "Unable to get initial parameters: " + e.getMessage());
    }
    CameraCharacteristics characteristics = LegacyMetadataMapper.createCharacteristics(legacyParameters, info);
    LegacyCameraDevice device = new LegacyCameraDevice(cameraId, legacyCamera, characteristics, threadCallbacks);
    return new CameraDeviceUserShim(cameraId, device, characteristics, init, threadCallbacks);
}
Also used : ServiceSpecificException(android.os.ServiceSpecificException) CameraCharacteristics(android.hardware.camera2.CameraCharacteristics) Camera(android.hardware.Camera) CameraInfo(android.hardware.Camera.CameraInfo)

Example 12 with Camera

use of android.hardware.Camera in project zxing by zxing.

the class OpenCameraInterface method open.

/**
   * Opens the requested camera with {@link Camera#open(int)}, if one exists.
   *
   * @param cameraId camera ID of the camera to use. A negative value
   *  or {@link #NO_REQUESTED_CAMERA} means "no preference", in which case a rear-facing
   *  camera is returned if possible or else any camera
   * @return handle to {@link OpenCamera} that was opened
   */
public static OpenCamera open(int cameraId) {
    int numCameras = Camera.getNumberOfCameras();
    if (numCameras == 0) {
        Log.w(TAG, "No cameras!");
        return null;
    }
    boolean explicitRequest = cameraId >= 0;
    Camera.CameraInfo selectedCameraInfo = null;
    int index;
    if (explicitRequest) {
        index = cameraId;
        selectedCameraInfo = new Camera.CameraInfo();
        Camera.getCameraInfo(index, selectedCameraInfo);
    } else {
        index = 0;
        while (index < numCameras) {
            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            Camera.getCameraInfo(index, cameraInfo);
            CameraFacing reportedFacing = CameraFacing.values()[cameraInfo.facing];
            if (reportedFacing == CameraFacing.BACK) {
                selectedCameraInfo = cameraInfo;
                break;
            }
            index++;
        }
    }
    Camera camera;
    if (index < numCameras) {
        Log.i(TAG, "Opening camera #" + index);
        camera = Camera.open(index);
    } else {
        if (explicitRequest) {
            Log.w(TAG, "Requested camera does not exist: " + cameraId);
            camera = null;
        } else {
            Log.i(TAG, "No camera facing " + CameraFacing.BACK + "; returning camera #0");
            camera = Camera.open(0);
            selectedCameraInfo = new Camera.CameraInfo();
            Camera.getCameraInfo(0, selectedCameraInfo);
        }
    }
    if (camera == null) {
        return null;
    }
    return new OpenCamera(index, camera, CameraFacing.values()[selectedCameraInfo.facing], selectedCameraInfo.orientation);
}
Also used : Camera(android.hardware.Camera)

Example 13 with Camera

use of android.hardware.Camera in project zxing by zxing.

the class CameraConfigurationManager method setDesiredCameraParameters.

void setDesiredCameraParameters(OpenCamera camera, boolean safeMode) {
    Camera theCamera = camera.getCamera();
    Camera.Parameters parameters = theCamera.getParameters();
    if (parameters == null) {
        Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
        return;
    }
    Log.i(TAG, "Initial camera parameters: " + parameters.flatten());
    if (safeMode) {
        Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
    }
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    initializeTorch(parameters, prefs, safeMode);
    CameraConfigurationUtils.setFocus(parameters, prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true), prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, true), safeMode);
    if (!safeMode) {
        if (prefs.getBoolean(PreferencesActivity.KEY_INVERT_SCAN, false)) {
            CameraConfigurationUtils.setInvertColor(parameters);
        }
        if (!prefs.getBoolean(PreferencesActivity.KEY_DISABLE_BARCODE_SCENE_MODE, true)) {
            CameraConfigurationUtils.setBarcodeSceneMode(parameters);
        }
        if (!prefs.getBoolean(PreferencesActivity.KEY_DISABLE_METERING, true)) {
            CameraConfigurationUtils.setVideoStabilization(parameters);
            CameraConfigurationUtils.setFocusArea(parameters);
            CameraConfigurationUtils.setMetering(parameters);
        }
    }
    parameters.setPreviewSize(bestPreviewSize.x, bestPreviewSize.y);
    theCamera.setParameters(parameters);
    theCamera.setDisplayOrientation(cwRotationFromDisplayToCamera);
    Camera.Parameters afterParameters = theCamera.getParameters();
    Camera.Size afterSize = afterParameters.getPreviewSize();
    if (afterSize != null && (bestPreviewSize.x != afterSize.width || bestPreviewSize.y != afterSize.height)) {
        Log.w(TAG, "Camera said it supported preview size " + bestPreviewSize.x + 'x' + bestPreviewSize.y + ", but after setting it, preview size is " + afterSize.width + 'x' + afterSize.height);
        bestPreviewSize.x = afterSize.width;
        bestPreviewSize.y = afterSize.height;
    }
}
Also used : SharedPreferences(android.content.SharedPreferences) OpenCamera(com.google.zxing.client.android.camera.open.OpenCamera) Camera(android.hardware.Camera)

Example 14 with Camera

use of android.hardware.Camera in project zxing by zxing.

the class CameraConfigurationManager method initFromCameraParameters.

/**
   * Reads, one time, values from the camera that are needed by the app.
   */
void initFromCameraParameters(OpenCamera camera) {
    Camera.Parameters parameters = camera.getCamera().getParameters();
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();
    int displayRotation = display.getRotation();
    int cwRotationFromNaturalToDisplay;
    switch(displayRotation) {
        case Surface.ROTATION_0:
            cwRotationFromNaturalToDisplay = 0;
            break;
        case Surface.ROTATION_90:
            cwRotationFromNaturalToDisplay = 90;
            break;
        case Surface.ROTATION_180:
            cwRotationFromNaturalToDisplay = 180;
            break;
        case Surface.ROTATION_270:
            cwRotationFromNaturalToDisplay = 270;
            break;
        default:
            // Have seen this return incorrect values like -90
            if (displayRotation % 90 == 0) {
                cwRotationFromNaturalToDisplay = (360 + displayRotation) % 360;
            } else {
                throw new IllegalArgumentException("Bad rotation: " + displayRotation);
            }
    }
    Log.i(TAG, "Display at: " + cwRotationFromNaturalToDisplay);
    int cwRotationFromNaturalToCamera = camera.getOrientation();
    Log.i(TAG, "Camera at: " + cwRotationFromNaturalToCamera);
    // Still not 100% sure about this. But acts like we need to flip this:
    if (camera.getFacing() == CameraFacing.FRONT) {
        cwRotationFromNaturalToCamera = (360 - cwRotationFromNaturalToCamera) % 360;
        Log.i(TAG, "Front camera overriden to: " + cwRotationFromNaturalToCamera);
    }
    /*
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    String overrideRotationString;
    if (camera.getFacing() == CameraFacing.FRONT) {
      overrideRotationString = prefs.getString(PreferencesActivity.KEY_FORCE_CAMERA_ORIENTATION_FRONT, null);
    } else {
      overrideRotationString = prefs.getString(PreferencesActivity.KEY_FORCE_CAMERA_ORIENTATION, null);
    }
    if (overrideRotationString != null && !"-".equals(overrideRotationString)) {
      Log.i(TAG, "Overriding camera manually to " + overrideRotationString);
      cwRotationFromNaturalToCamera = Integer.parseInt(overrideRotationString);
    }
     */
    cwRotationFromDisplayToCamera = (360 + cwRotationFromNaturalToCamera - cwRotationFromNaturalToDisplay) % 360;
    Log.i(TAG, "Final display orientation: " + cwRotationFromDisplayToCamera);
    if (camera.getFacing() == CameraFacing.FRONT) {
        Log.i(TAG, "Compensating rotation for front camera");
        cwNeededRotation = (360 - cwRotationFromDisplayToCamera) % 360;
    } else {
        cwNeededRotation = cwRotationFromDisplayToCamera;
    }
    Log.i(TAG, "Clockwise rotation from display to camera: " + cwNeededRotation);
    Point theScreenResolution = new Point();
    display.getSize(theScreenResolution);
    screenResolution = theScreenResolution;
    Log.i(TAG, "Screen resolution in current orientation: " + screenResolution);
    cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolution);
    Log.i(TAG, "Camera resolution: " + cameraResolution);
    bestPreviewSize = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolution);
    Log.i(TAG, "Best available preview size: " + bestPreviewSize);
    boolean isScreenPortrait = screenResolution.x < screenResolution.y;
    boolean isPreviewSizePortrait = bestPreviewSize.x < bestPreviewSize.y;
    if (isScreenPortrait == isPreviewSizePortrait) {
        previewSizeOnScreen = bestPreviewSize;
    } else {
        previewSizeOnScreen = new Point(bestPreviewSize.y, bestPreviewSize.x);
    }
    Log.i(TAG, "Preview size on screen: " + previewSizeOnScreen);
}
Also used : OpenCamera(com.google.zxing.client.android.camera.open.OpenCamera) Camera(android.hardware.Camera) Point(android.graphics.Point) Point(android.graphics.Point) WindowManager(android.view.WindowManager) Display(android.view.Display)

Example 15 with Camera

use of android.hardware.Camera in project android_frameworks_base by DirtyUnicorns.

the class ParameterUtils method convertSizeListToArray.

/**
     * Convert a camera API1 list of sizes into an array of sizes
     */
public static Size[] convertSizeListToArray(List<Camera.Size> sizeList) {
    checkNotNull(sizeList, "sizeList must not be null");
    Size[] array = new Size[sizeList.size()];
    int ctr = 0;
    for (Camera.Size s : sizeList) {
        array[ctr++] = new Size(s.width, s.height);
    }
    return array;
}
Also used : Size(android.util.Size) Camera(android.hardware.Camera) Point(android.graphics.Point)

Aggregations

Camera (android.hardware.Camera)281 Point (android.graphics.Point)50 IOException (java.io.IOException)39 WindowManager (android.view.WindowManager)32 Display (android.view.Display)30 Size (android.util.Size)27 Rect (android.graphics.Rect)25 CameraCharacteristics (android.hardware.camera2.CameraCharacteristics)25 ArrayList (java.util.ArrayList)24 Parameters (android.hardware.Camera.Parameters)21 SharedPreferences (android.content.SharedPreferences)20 CaptureRequest (android.hardware.camera2.CaptureRequest)15 SuppressLint (android.annotation.SuppressLint)14 Paint (android.graphics.Paint)14 OpenCamera (com.google.zxing.client.android.camera.open.OpenCamera)12 Bitmap (android.graphics.Bitmap)11 CameraMetadataNative (android.hardware.camera2.impl.CameraMetadataNative)10 ZoomData (android.hardware.camera2.legacy.ParameterUtils.ZoomData)10 Size (android.hardware.Camera.Size)9 MediaRecorder (android.media.MediaRecorder)7