标签: android-camera2

android camera2手柄缩放

我是Android Camera2 API的新手.我只是将我的所有项目移动到新的Camera2 API.我使用Camera2Basic示例作为起点.

我现在通过添加以下内容来尝试缩放:

public boolean onTouchEvent(MotionEvent event) {
    try {
        CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraId);
        float maxZoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM))*10;

        Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
        int action = event.getAction();
        float current_finger_spacing;

        if (event.getPointerCount() > 1) {
            // Multi touch logic
            current_finger_spacing = getFingerSpacing(event);

            if(finger_spacing != 0){
                if(current_finger_spacing > finger_spacing && maxZoom > zoom_level){
                    zoom_level++;

                }
                else if (current_finger_spacing < finger_spacing && zoom_level > 1){
                    zoom_level--;

                }
                int minW = (int) (m.width() / maxZoom);
                int …
Run Code Online (Sandbox Code Playgroud)

android zoom capture android-camera2

10
推荐指数
1
解决办法
7695
查看次数

是否可以将预览、图像分析和视频捕获与 CameraX 结合起来?

可以同时绑定PreviewImageAnalysis、吗?VideoCapture成对组合时,所有可能的组合(即Preview+ ImageAnalysisPreview+VideoCaptureImageAnalysis+ VideoCapture)都工作得很好,但将所有三个组合在一起会引发以下异常。

java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 1.  May be attempting to bind too many use cases.
    at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:193)
    at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:943)
    at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:293)
    at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:229)
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方法可以让我使用ImageAnalysis并同时录制视频?

android android-camera2 android-camerax

10
推荐指数
1
解决办法
2691
查看次数

旋转的 Android CameraX 图像

我已经按照 Google CameraX代码实验室来实现自定义相机。相机预览很好,但是当我在旋转图像捕获图像后拍摄图像时。我正在以纵向模式拍摄图像,但保存的图像是横向的。这是配置相机的方法

private fun startCamera() {

    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

    cameraProviderFuture.addListener(Runnable {
        // Used to bind the lifecycle of cameras to the lifecycle owner
        val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

        // Preview
        val preview = Preview.Builder()
            .setTargetRotation(this.windowManager.defaultDisplay.rotation)
            .build()
            .also {
                it.setSurfaceProvider(viewFinder.createSurfaceProvider())
            }

        imageCapture = ImageCapture.Builder()
            .setTargetRotation(this.windowManager.defaultDisplay.rotation)
            .build()

        val imageAnalyzer = ImageAnalysis.Builder()
            .build()
            .also {
                it.setAnalyzer(cameraExecutor, LuminosityAnalyzer { luma ->
                    Log.d(TAG, "Average luminosity: $luma")
                })
            }

        // Select back camera as a default
        val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

        try { …
Run Code Online (Sandbox Code Playgroud)

android image-rotation android-orientation android-camera2 android-camerax

10
推荐指数
2
解决办法
3212
查看次数

Camera2 将图像从 ImageReader 传递到 MediaRecorder

我正在尝试创建一个CameraCaptureSession具有四个输出的 Camera2:

  1. 屏幕预览(SurfaceView,最高 1080p)
  2. 照片拍摄(ImageReader,最多 8k 照片)
  3. 视频捕捉(MediaRecorder/ MediaCodec,最多 4k 视频)
  4. 帧处理(ImageReader最多 4k 视频帧)

不幸的是,Camera2 不支持同时连接所有这四个输出(表面),因此我必须做出妥协。

对我来说最合乎逻辑的妥协是将两个视频捕获管道合并为一个,以便帧处理输出(#4,ImageReader)将帧重定向到视频捕获输出(#3,MediaRecorder)。

如何从 ImageReader 写入图像:

val imageReader = ImageReader.newInstance(4000, 2256, ImageFormat.YUV_420_888, 3)
imageReader.setOnImageAvailableListener({ reader ->
  val image = reader.acquireNextImage() ?: return@setOnImageAvailableListener
  callback.onVideoFrameCaptured(image)
}, queue.handler)

val captureSession = device.createCaptureSession(.., imageReader.surface)
Run Code Online (Sandbox Code Playgroud)

..进入SurfaceMediaRecorder

val surface = MediaCodec.createPersistentInputSurface()
val recorder = MediaRecorder(context)
..
recorder.setInputSurface(surface)
Run Code Online (Sandbox Code Playgroud)

我想我可能需要一个带有直通着色器的 OpenGL 管道 - 但我不知道如何从ImageReader …

android opengl-es surfaceview android-camera android-camera2

10
推荐指数
1
解决办法
514
查看次数

使用TextureView缩放Camera2预览

我对Camera2 API的预览缩放有问题.我正在使用TextureView.

我想只缩放TextureView中显示的预览流.

我想缩放我使用Zoom Gesture的区域.

我使用SimpleOnScaleGestureListener!

我添加了以下代码.zoomingFactor和x和y位置都是正确的.

 private void updateTextureViewSize(float xPosi,float yPosi, float scale){
        float scaleX = 1.0f;
        float scaleY = 1.0f;




        float mVideoWidth = mCamcontrol.getmPreviewSize().getWidth();
        float mVideoHeight = mCamcontrol.getmPreviewSize().getHeight();

        int rotation = getWindowManager().getDefaultDisplay().getRotation();
        RectF viewRect = new RectF(0, 0, 1440, 2560);
        RectF bufferRect = new RectF(0, 0, mVideoHeight, mVideoWidth);

        bufferRect.offset(xPosi - bufferRect.centerX(), yPosi -    bufferRect.centerY());

         //16:9 faktor
        scaleX = ((mScale * scale) / 9f) * 16f;
        scaleY = ((mScale * scale) / 16f) * 9f;

        Matrix matrix = new …
Run Code Online (Sandbox Code Playgroud)

java android image zoom android-camera2

9
推荐指数
3
解决办法
1万
查看次数

Camera 2 API视频录制 - 自动闪光无法正常工作

我已经实现了一个使用camera2 API录制视频的自定义相机.可以选择将闪光灯设置为"开","关"和"自动".将闪光灯设置为"自动"不起作用,而其他选项工作正常.

这是代码:

    private void updateFlash() {
            Log.e(TAG, "Flash = " + currentFlash);
            switch (currentFlash) {
                case Constants.FLASH_OFF:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_OFF);
                    break;
                case Constants.FLASH_ON:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_TORCH);
                    break;
                case Constants.FLASH_TORCH:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_TORCH);
                    break;
                case Constants.FLASH_AUTO:
                    previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

                    break;
            }
 cameraCaptureSession.setRepeatingRequest(previewRequestBuilder.build(),
                        null, null);
}
Run Code Online (Sandbox Code Playgroud)

我已经google了很多,并尝试了几乎所有stackoverflow自动闪存的答案但没有工作.

请帮忙.我不明白这是什么问题.

camera android android-camera2

9
推荐指数
1
解决办法
458
查看次数

android.hardware.camera2.full来自哪里?

我正在尝试实现相机应用程序.并检查示例.一些示例包含以下清单功能:uses-feature android:name="android.hardware.camera2.full.我检查过官方文档和谷歌示例,但没有一个提到现有的这个功能.(或者我错过了一些).

这个功能的来源是什么android.hardware.camera?有什么区别?


编辑:让我困惑的是这些例子googlesamples:

https://github.com/googlesamples/android-Camera2Basic/blob/master/kotlinApp/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Raw/blob/master/Application/src/main/AndroidManifest.xml

他们正在使用新的Camera2API和旧的清单features.我不知道两者是如何结合在一起的.

android android-camera android-camera2

9
推荐指数
2
解决办法
3927
查看次数

使用Camera2 API从服务录制视频

我在一些我无法测试的手机上遇到问题(这是第一个问题)我正在尝试构建一个可以从camera2 API录制的服务.但是当我将应用程序发送到后台时,在某些手机上似乎存在我目前无法解决的问题.我只有日志,无法弄清楚应用程序无法正常工作的主要原因.

由于这个类太大而不能在这里显示为代码,你可以在这里找到它:https: //github.com/Astyan42/RecordingService/blob/master/RecordingService.java

这是给定的日志文件:https: //github.com/Astyan42/RecordingService/blob/master/logcat.txt

谢谢你的帮忙

android android-service android-camera2

9
推荐指数
1
解决办法
1121
查看次数

使用MediaCodec和Camera2 API录制视频

我正在尝试使用MediaCodec在onImageAvailable回调中记录ImageReader中的原始帧,但无法编写正常工作的代码.大多数示例都使用Camera 1 API或MediaRecorder.我的目标是捕获单个帧处理它并从中创建一个mp4

原始的YUV帧

        @Override
        public void onImageAvailable(ImageReader reader) {
            Image i = reader.acquireLatestImage();
            processImage(i);
            i.close();
            Log.d("hehe", "onImageAvailable");
        }
    };
Run Code Online (Sandbox Code Playgroud)

MediaCodec

MediaCodec codec = MediaCodec.createByCodecName(name);
 MediaFormat mOutputFormat; // member variable
 codec.setCallback(new MediaCodec.Callback() {
   @Override
   void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
     ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
     // fill inputBuffer with valid data
     …
     codec.queueInputBuffer(inputBufferId, …);
   }

   @Override
   void onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {
     ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
     MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
     // bufferFormat is equivalent to mOutputFormat
     // …
Run Code Online (Sandbox Code Playgroud)

android mediacodec android-camera2 android-mediacodec

9
推荐指数
1
解决办法
1783
查看次数

使用 Android-Camera2 API 访问 USB 摄像头

我有一个 UVC 摄像头,想要从我的 Android Pie (Android 9) 代码中访问和抓取帧。

这是我用来枚举连接到 Android 手机的摄像头的代码:

    @Override
    public void onResume()
    {
        CameraManager manager =
                (CameraManager)getSystemService(CAMERA_SERVICE);
        try {
            for (String cameraId : manager.getCameraIdList()) {
                CameraCharacteristics chars
                        = manager.getCameraCharacteristics(cameraId);
                // Do something with the characteristics
                int deviceLevel = chars.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
                Log.d(TAG, " **** device ["+cameraId+"] level:"+deviceLevel);
            }
        } catch(CameraAccessException e){
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在 Android 9/Pie (Pixel 3) 上跳来跳去,这显示了连接的 USB 摄像头。但是只列出了两个设备,手机的前置和后置摄像头。

这是我的清单文件 (AndroidManifest.xml) 中的功能和权限列表:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" /> …
Run Code Online (Sandbox Code Playgroud)

java android android-camera2

9
推荐指数
3
解决办法
7620
查看次数