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

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

源代码1 项目: EZFilter   文件: Camera2FilterActivity.java
@Override
public void onOpened(CameraDevice camera) { // 打开摄像头
    mCameraDevice = camera;
    mRenderPipeline = EZFilter.input(mCameraDevice, mPreviewSize)
            .addFilter(mCurrentRender)
            .enableRecord("/sdcard/recordCamera2.mp4", true, true) // 支持录制为视频
            .into(mRenderView);

    FBORender startRender = mRenderPipeline.getStartPointRender();
    if (startRender instanceof ISupportTakePhoto) {
        mSupportTakePhoto = (ISupportTakePhoto) startRender;
    }
    for (GLRender render : mRenderPipeline.getEndPointRenders()) {
        if (render instanceof ISupportRecord) {
            mSupportRecord = (ISupportRecord) render;
        }
    }
}
 
源代码2 项目: VIA-AI   文件: JavaCamera2View.java
@Override
protected void disconnectCamera() {
    Log.i(LOGTAG, "closeCamera");
    try {
        CameraDevice c = mCameraDevice;
        mCameraDevice = null;
        if (null != mCaptureSession) {
            mCaptureSession.close();
            mCaptureSession = null;
        }
        if (null != c) {
            c.close();
        }
        if (null != mImageReader) {
            mImageReader.close();
            mImageReader = null;
        }
    } finally {
        stopBackgroundThread();
    }
}
 
源代码3 项目: Camera2   文件: BlockingCameraManager.java
@Override
public void onOpened(CameraDevice camera) {
    if (VERBOSE) {
        Log.v(TAG, "onOpened: camera " + ((camera != null) ? camera.getId() : "null"));
    }

    synchronized (mLock) {
        assertInitialState();
        mNoReply = false;
        mSuccess = true;
        mDevice = camera;
        mDeviceReady.open();

        if (mTimedOut && camera != null) {
            camera.close();
            return;
        }
    }

    if (mProxy != null) mProxy.onOpened(camera);
}
 
源代码4 项目: LockDemo   文件: Camera2.java
/**
 * <p>Starts a capture session for camera preview.</p>
 * <p>This rewrites {@link #mPreviewRequestBuilder}.</p>
 * <p>The result will be continuously processed in {@link #mSessionCallback}.</p>
 */
void startCaptureSession() {
    if (!isCameraOpened() || !mPreview.isReady() || mImageReader == null) {
        return;
    }
    Size previewSize = chooseOptimalSize();
    mPreview.setBufferSize(previewSize.getWidth(), previewSize.getHeight());
    Surface surface = mPreview.getSurface();
    try {
        mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        mPreviewRequestBuilder.addTarget(surface);
        mCamera.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
                mSessionCallback, null);
    } catch (CameraAccessException e) {
        throw new RuntimeException("Failed to start camera session");
    }
}
 
源代码5 项目: webrtc_android   文件: Camera2Session.java
@Override
public void onOpened(CameraDevice camera) {
    checkIsOnCameraThread();

    Logging.d(TAG, "Camera opened.");
    cameraDevice = camera;

    surfaceTextureHelper.setTextureSize(captureFormat.width, captureFormat.height);
    surface = new Surface(surfaceTextureHelper.getSurfaceTexture());
    try {
        camera.createCaptureSession(
                Arrays.asList(surface), new CaptureSessionCallback(), cameraThreadHandler);
    } catch (CameraAccessException e) {
        reportError("Failed to create capture session. " + e);
        return;
    }
}
 
源代码6 项目: 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();
        }
    }
 
源代码7 项目: Camera2   文件: AndroidCamera2AgentImpl.java
/**
 * Simply propagates settings from provided {@link CameraSettings}
 * object to our {@link CaptureRequest.Builder} for use in captures.
 * <p>Most conversions to match the API 2 formats are performed by
 * {@link AndroidCamera2Capabilities.IntegralStringifier}; otherwise
 * any final adjustments are done here before updating the builder.</p>
 *
 * @param settings The new/updated settings
 */
private void applyToRequest(AndroidCamera2Settings settings) {
    // TODO: If invoked when in PREVIEW_READY state, a new preview size will not take effect

    mPersistentSettings.union(settings.getRequestSettings());
    mPreviewSize = settings.getCurrentPreviewSize();
    mPhotoSize = settings.getCurrentPhotoSize();

    if (mCameraState.getState() >= AndroidCamera2StateHolder.CAMERA_PREVIEW_ACTIVE) {
        // If we're already previewing, reflect most settings immediately
        try {
            mSession.setRepeatingRequest(
                    mPersistentSettings.createRequest(mCamera,
                            CameraDevice.TEMPLATE_PREVIEW, mPreviewSurface),
                    /*listener*/mCameraResultStateCallback, /*handler*/this);
        } catch (CameraAccessException ex) {
            Log.e(TAG, "Failed to apply updated request settings", ex);
        }
    } else if (mCameraState.getState() < AndroidCamera2StateHolder.CAMERA_PREVIEW_READY) {
        // If we're already ready to preview, this doesn't regress our state
        changeState(AndroidCamera2StateHolder.CAMERA_CONFIGURED);
    }
}
 
源代码8 项目: pasm-yolov3-Android   文件: JavaCamera2View.java
@Override
protected void disconnectCamera() {
    Log.i(LOGTAG, "closeCamera");
    try {
        CameraDevice c = mCameraDevice;
        mCameraDevice = null;
        if (null != mCaptureSession) {
            mCaptureSession.close();
            mCaptureSession = null;
        }
        if (null != c) {
            c.close();
        }
        if (null != mImageReader) {
            mImageReader.close();
            mImageReader = null;
        }
    } finally {
        stopBackgroundThread();
    }
}
 
源代码9 项目: TikTok   文件: Camera2.java
/**
 * <p>Starts a capture session for camera preview.</p>
 * <p>This rewrites {@link #mPreviewRequestBuilder}.</p>
 * <p>The result will be continuously processed in {@link #mSessionCallback}.</p>
 */
void startCaptureSession() {
    if (!isCameraOpened() || !mPreview.isReady() || mImageReader == null) {
        return;
    }
    Size previewSize = chooseOptimalSize();
    mPreview.setBufferSize(previewSize.getWidth(), previewSize.getHeight());
    Surface surface = mPreview.getSurface();
    try {
        mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        mPreviewRequestBuilder.addTarget(surface);
        mCamera.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
                mSessionCallback, null);
    } catch (CameraAccessException e) {
        throw new RuntimeException("Failed to start camera session");
    }
}
 
源代码10 项目: android-robocar   文件: DeviceCallback.java
@Override
public void onError(@NonNull CameraDevice cameraDevice, int error) {
  switch (error) {
    case CameraDevice.StateCallback.ERROR_CAMERA_IN_USE:
      Timber.e("Camera error: ERROR_CAMERA_IN_USE");
      break;
    case CameraDevice.StateCallback.ERROR_MAX_CAMERAS_IN_USE:
      Timber.e("Camera error: ERROR_MAX_CAMERAS_IN_USE");
      break;
    case CameraDevice.StateCallback.ERROR_CAMERA_DISABLED:
      Timber.e("Camera error: ERROR_CAMERA_DISABLED");
      break;
    case CameraDevice.StateCallback.ERROR_CAMERA_DEVICE:
      Timber.e("Camera error: ERROR_CAMERA_DEVICE");
      break;
    case CameraDevice.StateCallback.ERROR_CAMERA_SERVICE:
      Timber.e("Camera error: ERROR_CAMERA_SERVICE");
      break;
    default:
      Timber.e("Camera error: UNKNOWN");
      break;
  }

  this.cameraDevice = cameraDevice;
  closeDevice();
}
 
/**
 * Capture a still picture. This method should be called when we get a response in
 * {@link #mCaptureCallback} from both {@link #lockFocus()}.
 */
private void captureStillPicture() {
    try {
        final Activity activity = getActivity();
        if (null == activity || 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
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));

        CameraCaptureSession.CaptureCallback CaptureCallback
                = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                           @NonNull CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {
                showToast("Saved: " + mFile);
                Log.d(TAG, mFile.toString());
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码12 项目: 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);
    }
}
 
源代码13 项目: AndroidDemo   文件: CameraH264Activity.java
CameraConfig(String cameraId, CameraCharacteristics characteristics, @NonNull CameraDevice.StateCallback deviceStateCallback, @NonNull Handler handler) {
    this.cameraId = cameraId;
    Integer orientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
    this.orientation = orientation == null ? 0 : orientation;
    Integer level = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
    fullSupport = level != null && level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
    this.deviceStateCallback = deviceStateCallback;
    this.handler = handler;
}
 
源代码14 项目: io2015-codelabs   文件: CameraFragment.java
@Override
public void onOpened(CameraDevice cameraDevice) {
    Log.d(TAG, "onOpened: ");
    // This method is called when the camera is opened.  We start camera preview here.
    mCameraOpenCloseLock.release();
    mCameraDevice = cameraDevice;
    createCameraPreviewSession();
}
 
源代码15 项目: Camera2Vision   文件: Camera2Source.java
/**
 * Capture a still picture. This method should be called when we get a response in
 * {@link #mCaptureCallback} from both {@link #lockFocus()}.
 */
private void captureStillPicture() {
    try {
        if (null == mCameraDevice) {
            return;
        }
        if(mShutterCallback != null) {
            mShutterCallback.onShutter();
        }
        // This is the CaptureRequest.Builder that we use to take a picture.
        final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(mImageReaderStill.getSurface());

        // Use the same AE and AF modes as the preview.
        captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, mFocusMode);
        if(mFlashSupported) {
            captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, mFlashMode);
        }

        // Orientation
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(mDisplayOrientation));

        CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
源代码16 项目: 365browser   文件: VideoCaptureCamera2.java
@Override
public void onOpened(CameraDevice cameraDevice) {
    mCameraDevice = cameraDevice;
    changeCameraStateAndNotify(CameraState.CONFIGURING);
    if (createPreviewObjectsAndStartPreview()) return;

    changeCameraStateAndNotify(CameraState.STOPPED);
    nativeOnError(mNativeVideoCaptureDeviceAndroid, "Error configuring camera");
}
 
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void takePicture() {
  try {
    CaptureRequest.Builder takePictureBuilder = mCamera.createCaptureRequest(
      CameraDevice.TEMPLATE_STILL_CAPTURE);

    takePictureBuilder.addTarget(mImageReader.getSurface());

    mCaptureSession.capture(takePictureBuilder.build(),
      null,  // CaptureCallback
      null);      // optional Handler
  } catch (CameraAccessException e) {
    Log.e(TAG, "Error capturing the photo", e);
  }
}
 
源代码18 项目: fritz-examples   文件: CameraConnectionFragment.java
@Override
public void onError(final CameraDevice cd, final int error) {
    cameraOpenCloseLock.release();
    cd.close();
    cameraDevice = null;
    final Activity activity = getActivity();
    if (null != activity) {
        activity.finish();
    }
}
 
源代码19 项目: 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();
    }
}
 
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
    mCameraDevice = cameraDevice;
    startPreview();
    mCameraOpenCloseLock.release();
    if (null != mTextureView) {
        configureTransform(mTextureView.getWidth(), mTextureView.getHeight());
    }
}
 
源代码21 项目: SimpleVideoEditor   文件: Camera2.java
@Override
public void onOpened(@NonNull CameraDevice camera) {
    mCamera = camera;
    mConfig.setCameraOpened(true);
    mCallback.onCameraOpened();
    startPreviewSession();
}
 
源代码22 项目: webrtc_android   文件: Camera2Session.java
@Override
public void onClosed(CameraDevice camera) {
    checkIsOnCameraThread();

    Logging.d(TAG, "Camera device closed.");
    events.onCameraClosed(Camera2Session.this);
}
 
源代码23 项目: phoenix   文件: Camera2Manager.java
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
    Camera2Manager.this.mCameraDevice = cameraDevice;
    if (mCameraOpenListener != null) {
        mUiiHandler.post(new Runnable() {
            @Override
            public void run() {
                if (!TextUtils.isEmpty(mCameraId) && mPreviewSize != null)
                    mCameraOpenListener.onCameraOpened(mCameraId, mPreviewSize, Camera2Manager.this);
            }
        });
    }
}
 
源代码24 项目: sandriosCamera   文件: Camera2Manager.java
private void captureStillPicture() {
    try {
        if (null == cameraDevice) {
            return;
        }
        final CaptureRequest.Builder captureBuilder =
                cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(imageReader.getSurface());

        captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getPhotoOrientation(configurationProvider.getSensorPosition()));

        CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                           @NonNull CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {
                Log.d(TAG, "onCaptureCompleted: ");
            }
        };

        captureSession.stopRepeating();
        captureSession.capture(captureBuilder.build(), CaptureCallback, null);

    } catch (CameraAccessException e) {
        Log.e(TAG, "Error during capturing picture");
    }
}
 
源代码25 项目: android-Camera2Raw   文件: Camera2RawFragment.java
@Override
public void onError(CameraDevice cameraDevice, int error) {
    Log.e(TAG, "Received camera device error: " + error);
    synchronized (mCameraStateLock) {
        mState = STATE_CLOSED;
        mCameraOpenCloseLock.release();
        cameraDevice.close();
        mCameraDevice = null;
    }
    Activity activity = getActivity();
    if (null != activity) {
        activity.finish();
    }
}
 
源代码26 项目: android-HdrViewfinder   文件: CameraOps.java
/**
 * Get a request builder for the current camera.
 */
public CaptureRequest.Builder createCaptureRequest(int template) throws CameraAccessException {
    CameraDevice device = mCameraDevice;
    if (device == null) {
        throw new IllegalStateException("Can't get requests when no camera is open");
    }
    return device.createCaptureRequest(template);
}
 
源代码27 项目: fritz-examples   文件: CameraConnectionFragment.java
@Override
public void onError(final CameraDevice cd, final int error) {
    cameraOpenCloseLock.release();
    cd.close();
    cameraDevice = null;
    final Activity activity = getActivity();
    if (null != activity) {
        activity.finish();
    }
}
 
@SuppressLint("NewApi")
public void changeFlash(int type){
    try {
        CaptureRequest.Builder requestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        requestBuilder.addTarget(mSurfaceHolder.getSurface());
        if(type == FLASH_ON)
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
        else if(type == FLASH_OFF)
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.FLASH_MODE_OFF);
        mCameraCaptureSession.setRepeatingRequest(requestBuilder.build(),null,childHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
@Override
public void onDisconnected(CameraDevice camera) {//关闭摄像头
    if (null != mCameraDevice) {
        mCameraDevice.close();
        CameraActivity.this.mCameraDevice = null;
    }
}
 
源代码30 项目: MultiMediaSample   文件: Camera2Fragment.java
/**
 * Capture a still picture. This method should be called when we get a response in
 * {@link #mCaptureCallback} from both {@link #lockFocus()}.
 */
private void captureStillPicture() {
    try {
        final Activity activity = getActivity();
        if (null == activity || 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
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));

        CameraCaptureSession.CaptureCallback CaptureCallback
                = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                           @NonNull CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {
                showToast("拍照成功,图片保存为: " + mFile);
                Log.d(TAG, mFile.toString());
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
 
 类所在包
 类方法
 同包方法