类android.hardware.camera2.CaptureRequest源码实例Demo

下面列出了怎么用android.hardware.camera2.CaptureRequest的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: WeiXinRecordedDemo   文件: CameraHelp2.java
public void shotPhoto(){

        try {
            CaptureRequest.Builder captureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
            captureRequestBuilder.addTarget(mImageReader.getSurface());
            // 自动对焦
            captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
            // 自动曝光
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
            captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, mOrientation);
            CaptureRequest captureRequest = captureRequestBuilder.build();
            mCameraCaptureSession.capture(captureRequest, null, mHandler);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
 
源代码2 项目: TikTok   文件: Camera2.java
/**
 * Updates the internal state of auto-focus to {@link #mAutoFocus}.
 */
void updateAutoFocus() {
    if (mAutoFocus) {
        int[] modes = mCameraCharacteristics.get(
                CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
        // Auto focus is not supported
        if (modes == null || modes.length == 0 ||
                (modes.length == 1 && modes[0] == CameraCharacteristics.CONTROL_AF_MODE_OFF)) {
            mAutoFocus = false;
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_OFF);
        } else {
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        }
    } else {
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                CaptureRequest.CONTROL_AF_MODE_OFF);
    }
}
 
源代码3 项目: Camera2   文件: CaptureDataSerializer.java
/**
 * Generate a human-readable string of the given capture request and write
 * it to the given file.
 */
public static void toFile(String title, CameraMetadata<?> metadata, File file)
{
    try
    {
        // Will append if the file already exists.
        FileWriter writer = new FileWriter(file, true);
        if (metadata instanceof CaptureRequest)
        {
            dumpMetadata(title, (CaptureRequest) metadata, writer);
        } else if (metadata instanceof CaptureResult)
        {
            dumpMetadata(title, (CaptureResult) metadata, writer);
        } else
        {
            writer.close();
            throw new IllegalArgumentException("Cannot generate debug data from type "
                    + metadata.getClass().getName());
        }
        writer.close();
    } catch (IOException ex)
    {
        Log.e(TAG, "Could not write capture data to file.", ex);
    }
}
 
@Override
public int setRepeatingBurst(List<CaptureRequest> requests,
        CaptureCallback callback, Handler handler) throws CameraAccessException {
    checkRepeatingRequests(requests);

    synchronized (mDeviceImpl.mInterfaceLock) {
        checkNotClosed();

        handler = checkHandler(handler, callback);

        if (DEBUG) {
            CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
            Log.v(TAG, mIdString + "setRepeatingBurst - requests " +
                    Arrays.toString(requestArray) + ", callback " + callback +
                    " handler" + "" + handler);
        }

        return addPendingSequence(mDeviceImpl.setRepeatingBurst(requests,
                createCaptureCallbackProxy(handler, callback), mDeviceExecutor));
    }
}
 
/**
 * Unlock the focus. This method should be called when still image capture sequence is
 * finished.
 */
private void unlockFocus() {
    try {
        // Reset the auto-focus trigger
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
        if (mFlashSupported) {
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, mFlashMode);
        }
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler);
        // After this, the camera will go back to the normal state of preview.
        mState = STATE_PREVIEW;
        mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码6 项目: cameraview   文件: Camera2.java
/**
 * Unlocks the auto-focus and restart camera preview. This is supposed to be called after
 * capturing a still picture.
 */
void unlockFocus() {
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
            CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
    try {
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, null);
        updateAutoFocus();
        updateFlash();
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
                CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
        mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback,
                null);
        mCaptureCallback.setState(PictureCaptureCallback.STATE_PREVIEW);
    } catch (CameraAccessException e) {
        Log.e(TAG, "Failed to restart camera preview.", e);
    }
}
 
源代码7 项目: EvilsLive   文件: CameraNew.java
private void doPreviewConfiguration() {
        if (mCamera == null) {
            return;
        }

        try {
//            mPreviewBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
//            mPreviewBuilder.addTarget(surfaceView.getHolder().getSurface());
//            mPreviewBuilder.addTarget(mImageReader.getSurface());
            mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
//            mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
//            mPreviewBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
//            mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);

            mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mFps[mFps.length -1 ]);
            mCaptureSession.setRepeatingRequest(mPreviewBuilder.build(), mPreCaptureCallback, mHandler);

        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
 
源代码8 项目: LockDemo   文件: Camera2.java
/**
 * Unlocks the auto-focus and restart camera preview. This is supposed to be called after
 * capturing a still picture.
 */
void unlockFocus() {
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
            CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
    try {
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, null);
        updateAutoFocus();
        updateFlash();
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
                CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
        mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback,
                null);
        mCaptureCallback.setState(PictureCaptureCallback.STATE_PREVIEW);
    } catch (CameraAccessException e) {
        Log.e(TAG, "Failed to restart camera preview.", e);
    }
}
 
源代码9 项目: DeviceConnect-Android   文件: CameraWrapper.java
private void setDefaultCaptureRequest(final CaptureRequest.Builder request,
                                      final boolean trigger) {
    if (hasAutoFocus()) {
        request.set(CaptureRequest.CONTROL_AF_MODE, mAutoFocusMode);
        if (trigger) {
            request.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
        }
    }
    if (hasAutoExposure()) {
        request.set(CaptureRequest.CONTROL_AE_MODE, mAutoExposureMode);
    }
    setWhiteBalance(request);
    // Light が ON の場合は、CONTROL_AE_MODE を CONTROL_AE_MODE_ON にする。
    if (mIsTouchOn) {
        mUseTouch = true;
        request.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
        request.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
    }
}
 
源代码10 项目: libsoftwaresync   文件: CaptureRequestFactory.java
public CaptureRequest.Builder makeFrameInjectionRequest(
    long desiredExposureTimeNs, List<Surface> imageSurfaces) throws CameraAccessException {
  CaptureRequest.Builder builder = device.createCaptureRequest(TEMPLATE_PREVIEW);
  builder.set(CONTROL_MODE, CONTROL_MODE_AUTO);
  builder.set(CONTROL_AE_MODE, CONTROL_AE_MODE_OFF);
  builder.set(SENSOR_EXPOSURE_TIME, desiredExposureTimeNs);
  // TODO: Inserting frame duration directly would be more accurate than inserting exposure since
  // {@code frame duration ~ exposure + variable overhead}. However setting frame duration may not
  // be supported on many android devices, so we use exposure time here.

  List<Integer> targetIndices = new ArrayList<>();
  for (int i = 0; i < imageSurfaces.size(); i++) {
    builder.addTarget(imageSurfaces.get(i));
    targetIndices.add(i);
  }
  builder.setTag(new CaptureRequestTag(targetIndices, PhaseAlignController.INJECT_FRAME));

  return builder;
}
 
源代码11 项目: aurora-imui   文件: CameraNew.java
/**
 * Run the precapture sequence for capturing a still image. This method should be called when
 * we get a response in {@link #mCaptureCallback} from {@link #lockFocus()}.
 */
private void runPrecaptureSequence() {
    try {
        // This is how to tell the camera to trigger.
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
                CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
        // Tell #mCaptureCallback to wait for the precapture sequence to be set.
        mState = STATE_WAITING_PRECAPTURE;
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback,
                mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码12 项目: cameraview   文件: Camera2.java
/**
 * Updates the internal state of flash to {@link #mFlash}.
 */
void updateFlash() {
    switch (mFlash) {
        case Constants.FLASH_OFF:
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                    CaptureRequest.CONTROL_AE_MODE_ON);
            mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_OFF);
            break;
        case Constants.FLASH_ON:
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                    CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
            mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_OFF);
            break;
        case Constants.FLASH_TORCH:
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                    CaptureRequest.CONTROL_AE_MODE_ON);
            mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_TORCH);
            break;
        case Constants.FLASH_AUTO:
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                    CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
            mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_OFF);
            break;
        case Constants.FLASH_RED_EYE:
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                    CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE);
            mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_OFF);
            break;
    }
}
 
源代码13 项目: Camera2   文件: ConvergedImageCaptureCommand.java
private void resetRepeating(FrameServer.Session session) throws InterruptedException,
        CameraCaptureSessionClosedException, CameraAccessException,
        ResourceAcquisitionFailedException
{
    RequestBuilder repeatingBuilder = mRepeatingRequestBuilder.create
            (mRepeatingRequestTemplate);
    session.submitRequest(Arrays.asList(repeatingBuilder.build()),
            FrameServer.RequestType.REPEATING);

    RequestBuilder triggerCancelBuilder = mRepeatingRequestBuilder
            .create(mRepeatingRequestTemplate);
    triggerCancelBuilder.setParam(CaptureRequest.CONTROL_AF_TRIGGER,
            CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);
    session.submitRequest(Arrays.asList(triggerCancelBuilder.build()),
            FrameServer.RequestType.NON_REPEATING);

    // Some devices (e.g. N6) implicitly lock AE after sending an
    // AE_PRECAPTURE trigger. (see bug: 19265647)
    // The implicit lock is released when a request with
    // INTENT_STILL_CAPTURE is taken.

    // However, if we never get to that point (because the command was
    // interrupted before the request for a photo was sent), then we must be
    // sure to cancel this implicit AE lock to resume normal AE behavior.
    // Sending a request for an explicit AE lock (followed, implicitly, by a
    // request from the current repeating request, which has AE lock off)
    // fixes the issue and results in normal AE behavior.
    RequestBuilder hackAETriggerCancelBuilder = mRepeatingRequestBuilder.create
            (mRepeatingRequestTemplate);
    hackAETriggerCancelBuilder.setParam(CaptureRequest.CONTROL_AE_LOCK, true);

    session.submitRequest(Arrays.asList(hackAETriggerCancelBuilder.build()),
            FrameServer.RequestType.NON_REPEATING);
}
 
源代码14 项目: sandriosCamera   文件: Camera2Manager.java
private void unlockFocus() {
    try {
        previewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
        captureSession.capture(previewRequestBuilder.build(), captureCallback, backgroundHandler);
        previewState = STATE_PREVIEW;
        captureSession.setRepeatingRequest(previewRequest, captureCallback, backgroundHandler);
    } catch (Exception e) {
        Log.e(TAG, "Error during focus unlocking");
    }
}
 
源代码15 项目: 361Camera   文件: Camera2Fragment.java
private boolean sendRepeatPreviewRequest() {
    try {
        CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        builder.addTarget(mPreviewSurface);
        builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
        builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());

        mCaptureSession.setRepeatingRequest(builder.build(), mPreCaptureCallback, mBackgroundHandler);
        return true;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return false;
    }
}
 
源代码16 项目: android_9.0.0_r45   文件: RequestHolder.java
/**
 * Construct a new {@link Builder} to generate {@link RequestHolder} objects.
 *
 * @param requestId the ID to set in {@link RequestHolder} objects.
 * @param subsequenceId the sequence ID to set in {@link RequestHolder} objects.
 * @param request the original {@link CaptureRequest} to set in {@link RequestHolder}
 *                objects.
 * @param repeating {@code true} if the request is repeating.
 */
public Builder(int requestId, int subsequenceId, CaptureRequest request,
               boolean repeating, Collection<Long> jpegSurfaceIds) {
    checkNotNull(request, "request must not be null");
    mRequestId = requestId;
    mSubsequenceId = subsequenceId;
    mRequest = request;
    mRepeating = repeating;
    mJpegSurfaceIds = jpegSurfaceIds;
    mNumJpegTargets = numJpegTargets(mRequest);
    mNumPreviewTargets = numPreviewTargets(mRequest);
}
 
源代码17 项目: MobileInfo   文件: CameraInfo.java
private static String getAvailableOisDataModes(int availableOisDataModes) {
    switch (availableOisDataModes) {
        case CaptureRequest.STATISTICS_OIS_DATA_MODE_ON:
            return "ON";
        case CaptureRequest.STATISTICS_OIS_DATA_MODE_OFF:
            return "OFF";
        default:
            return UNKNOWN + "-" + availableOisDataModes;

    }
}
 
源代码18 项目: android_9.0.0_r45   文件: LegacyRequest.java
/**
 * Create a new legacy request; the parameters are copied.
 *
 * @param characteristics immutable static camera characteristics for this camera
 * @param captureRequest immutable user-defined capture request
 * @param previewSize immutable internal preview size used for {@link Camera#setPreviewSurface}
 * @param parameters the initial camera1 parameter state; (copied) can be mutated
 */
public LegacyRequest(CameraCharacteristics characteristics, CaptureRequest captureRequest,
        Size previewSize, Camera.Parameters parameters) {
    this.characteristics = checkNotNull(characteristics, "characteristics must not be null");
    this.captureRequest = checkNotNull(captureRequest, "captureRequest must not be null");
    this.previewSize = checkNotNull(previewSize, "previewSize must not be null");
    checkNotNull(parameters, "parameters must not be null");

    this.parameters = Camera.getParametersCopy(parameters);
}
 
源代码19 项目: EvilsLive   文件: CameraNew.java
private void reconfigureCamera() {
    if(mCamera != null) {
        try {
            mCaptureSession.stopRepeating();

            mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
            mCaptureSession.capture(mPreviewBuilder.build(), mPreCaptureCallback, mHandler);

            doPreviewConfiguration();
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
}
 
源代码20 项目: Camera2   文件: AndroidCameraCaptureSessionProxy.java
@Override
public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request,
                             long timestamp, long frameNumber)
{
    mCallback.onCaptureStarted(AndroidCameraCaptureSessionProxy.this, request, timestamp,
            frameNumber);
}
 
源代码21 项目: android_9.0.0_r45   文件: ParamsUtils.java
/**
 * Return the value set by the key, or the {@code defaultValue} if no value was set.
 *
 * @throws NullPointerException if any of the args were {@code null}
 */
public static <T> T getOrDefault(CaptureRequest r, CaptureRequest.Key<T> key, T defaultValue) {
    checkNotNull(r, "r must not be null");
    checkNotNull(key, "key must not be null");
    checkNotNull(defaultValue, "defaultValue must not be null");

    T value = r.get(key);
    if (value == null) {
        return defaultValue;
    } else {
        return value;
    }
}
 
源代码22 项目: DeviceConnect-Android   文件: CameraWrapper.java
/**
 * カメラのライトをONにする.
 *
 * @param listener 実際にライトがONになったタイミングで実行されるリスナー
 * @param handler リスナーを実行するハンドラー. リスナーを指定する場合は必須
 * @throws CameraWrapperException カメラに何らかの致命的なエラーが発生した場合
 */
public synchronized void turnOnTorch(final @Nullable TorchOnListener listener,
                                     final @Nullable Handler handler) throws CameraWrapperException {
    if (listener != null && handler == null) {
        throw new IllegalArgumentException("handler is mandatory if listener is specified.");
    }
    if (mIsTouchOn) {
        notifyTorchOnEvent(listener, handler);
        return;
    }
    try {
        CameraDevice cameraDevice = openCamera();
        mCaptureSession = createCaptureSession(cameraDevice);
        final CaptureRequest.Builder requestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        if (mIsPreview) {
            if (mPreviewSurface != null) {
                requestBuilder.addTarget(mPreviewSurface);
            }
            if (mTargetSurface != null) {
                requestBuilder.addTarget(mTargetSurface);
            }
        }
        if (mIsRecording) {
            requestBuilder.addTarget(mRecordingSurface);
        }

        if (!mIsPreview && !mIsRecording) {
            requestBuilder.addTarget(mDummyPreviewReader.getSurface());
        }
        requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
        mCaptureSession.setRepeatingRequest(requestBuilder.build(), null, mBackgroundHandler);
        mUseTouch = true;
        mIsTouchOn = true;
        notifyTorchOnEvent(listener, handler);
    } catch (CameraAccessException e) {
        throw new CameraWrapperException(e);
    }
}
 
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session,
    @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
  Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
  if (faceDetectorCallback != null) {
    faceDetectorCallback.onGetFaces(faces);
  }
}
 
源代码24 项目: DeviceConnect-Android   文件: Camera2Wrapper.java
@Override
public void onCaptureResult(CaptureResult result, boolean isCompleted) {
    Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
    if (DEBUG) {
        Log.d(TAG, "aeState: " + Camera2Helper.debugAEState(aeState) + " isCompleted: " + isCompleted);
    }
    boolean isAeReady = aeState == null
            || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED
            || aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED;
    boolean timeout = (System.currentTimeMillis() - mStartTime) > 5000;
    if (isAeReady || timeout) {
        nextState(mTakePictureState);
    }
}
 
源代码25 项目: PHONK   文件: CameraTexture2.java
private void captureStillPicture() {
    MLog.d(TAG, "captureStillPicture");

    try {
        if (null == mCameraDevice) {
            return;
        }
        // This is the CaptureRequest.Builder that we use to take a picture.
        final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(mImageReader.getSurface());

        // Use the same AE and AF modes as the preview.
        captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        // setAutoFlash(captureBuilder);

        // Orientation
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 0);

        CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
                Log.d(TAG, "saved to: "); // + mFile.toString());
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码26 项目: 361Camera   文件: Camera2Fragment.java
private void triggerFocusArea(float x, float y) {
    CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
    try {
        CameraCharacteristics characteristics
                = manager.getCameraCharacteristics(mCameraId);
        Integer sensorOrientation = characteristics.get(
                CameraCharacteristics.SENSOR_ORIENTATION);

        sensorOrientation = sensorOrientation == null ? 0 : sensorOrientation;

        Rect cropRegion = AutoFocusHelper.cropRegionForZoom(characteristics, 1f);
        mAERegions = AutoFocusHelper.aeRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);
        mAFRegions = AutoFocusHelper.afRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);

        // Step 1: Request single frame CONTROL_AF_TRIGGER_START.
        CaptureRequest.Builder builder;
        builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        builder.addTarget(mPreviewSurface);
        builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);

        mControlAFMode = AutoFocusMode.AUTO;

        builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());
        builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);
        mCaptureSession.capture(builder.build(), mPreCaptureCallback, mBackgroundHandler);

        // Step 2: Call repeatingPreview to update mControlAFMode.
        sendRepeatPreviewRequest();
        resumeContinuousAFAfterDelay(DELAY_TIME_RESUME_CONTINUOUS_AF);
    } catch (CameraAccessException ex) {
        Log.e(TAG, "Could not execute preview request.", ex);
    }
}
 
/**
 * Run the precapture sequence for capturing a still image. This method should be called when
 * we get a response in {@link #mCaptureCallback} from {@link #lockFocus()}.
 */
private void runPrecaptureSequence() {
    try {
        // This is how to tell the camera to trigger.
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
        // Tell #mCaptureCallback to wait for the precapture sequence to be set.
        mState = STATE_WAITING_PRECAPTURE;
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码28 项目: SimpleVideoEditor   文件: Camera2.java
private void updateAutoFocus() {
    if (mConfig.isAutoFocus()) {
        CameraView.MODE mode = mConfig.getMode();
        if (mode == CameraView.MODE.PICTURE) {
            mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        } else if (mode == CameraView.MODE.VIDEO) {
            mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO);
        }
    } else {
        mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                CaptureRequest.CONTROL_AF_MODE_MACRO);
    }
}
 
/**
 * Run the precapture sequence for capturing a still image. This method should be called when
 * we get a response in {@link #mCaptureCallback} from {@link #lockFocus()}.
 */
private void runPrecaptureSequence() {
    try {
        // This is how to tell the camera to trigger.
        mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
                CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
        // Tell #mCaptureCallback to wait for the precapture sequence to be set.
        mState = STATE_WAITING_PRECAPTURE;
        mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback,
                mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码30 项目: EZFilter   文件: Camera2Input.java
@Override
public void takePhoto(boolean isFront, int degree, PhotoTakenCallback callback) {
    mIsFront = isFront;
    mDegree = degree;
    mPhotoTakenCallback = callback;

    CaptureRequest.Builder captureRequestBuilder;
    try {
        captureRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        // 将ImageReader的surface作为CaptureRequest.Builder的目标
        captureRequestBuilder.addTarget(mImageReader.getSurface());
        // 自动对焦
        captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        // 自动曝光
        captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
        // 设置照片方向
        if (mIsFront) {
            captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, 270);
        } else {
            captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90);
        }
        // 拍照
        CaptureRequest captureRequest = captureRequestBuilder.build();
        mCameraCaptureSession.capture(captureRequest, null, mPreviewHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
 类所在包
 同包方法