标签: camera2

使用camera2与不赞成使用相机 - 最佳做法是什么?

我正在编写一个应用程序,相机是一个必不可少的功能.在这方面,我希望100%确定以下几个方面:

  1. 如果我使用已弃用的相机:应用程序现在仍会在所有API上运行吗?
  2. 如果1)是肯定的:在什么时间点,这个应用程序将不再运行在所有API上(我的应用程序应涵盖最低API 17)?
  3. 我在哪里可以找到有关2)的更新官方信息,即计划内容和何时?
  4. 说,我现在已经使用新的camera2,我的理解是该应用程序不能在21以下的任何API上运行 - 对吗?
  5. 我到目前为止得到的信息的工作假设是:现在仍然使用已弃用的相机.但是,请继续关注API的市场份额并尽快开始学习camera2,以便在未来2 - 3年内准备好将应用程序切换到camera2.你同意吗?

在任何情况下,使用设备的相机并使其在几乎所有目标设备上运行都是非常棘手的(因为现在我很高兴掌握了"旧"相机......).因此,我真的想确定以上几点.非常感谢你的回答.

camera android deprecated camera2

24
推荐指数
1
解决办法
8170
查看次数

Android相机2 api BufferQueue已被放弃

我正在测试新的Android camera2 API,我希望从相机控制每一帧.我为此做的是创建一个ImageReader并设置分辨率和图像格式.

ImageReader imageReader = ImageReader.newInstance(1280,720,ImageFormat.YUV_420_888,1);
imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(ImageReader reader) {
        Image image = reader.acquireLatestImage();
        Log.i(MainActivity.LOG_TAG,"imageReader: "+System.currentTimeMillis());
        image.close();
    }
},null);
Run Code Online (Sandbox Code Playgroud)

之后,我使用参数TEMPLATE_PREVIEW创建新的CaptureRequest并向他添加目标.对于cameraCaptureSession,我使用此请求创建新的setRepeatingRequestimageReader

 try {
    final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

    builder.addTarget(imageReader.getSurface());

    mCameraDevice.createCaptureSession(
            Arrays.asList(imageReader.getSurface()),
            new CameraCaptureSession.StateCallback() {
                @Override
                public void onConfigured(CameraCaptureSession session) {
                    mSession = session;
                    try {
                        mSession.setRepeatingRequest(builder.build(),null,null);
                    } catch (CameraAccessException e) {
                        e.printStackTrace();
                    }
                }
                @Override
                public void onConfigureFailed(CameraCaptureSession session) {

                }
            },
            null
    );
} …
Run Code Online (Sandbox Code Playgroud)

java android camera2

16
推荐指数
1
解决办法
9343
查看次数

Android camera2:java.lang.IllegalStateException:已经获得了maxImages(1),在获取更多内容之前调用#close

您好无法解决此问题.

我已经在ImageAvailable回调中调用了imageReader.close,但仍然有错误:

java.lang.IllegalStateException:已经获取了maxImages(1),在获取更多之前调用#close.

我的代码在这里:

private ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener()
{
    @Override
    public void onImageAvailable(ImageReader reader) {
        Image img = mReader.acquireLatestImage();

        mReader.close();
    }

};
Run Code Online (Sandbox Code Playgroud)

PS.我也使用参数阅读器,但似乎没有解决问题

android image reader camera2

14
推荐指数
1
解决办法
6538
查看次数

60/120fps在Android设备上预览数据?

我们希望使用Neon汇编或GPU着色器处理120 fps(或60fps)相机预览数据,以执行简单的图像处理操作(例如3x3卷积).我们对在屏幕上显示图像不感兴趣,因此相机数据应该直接转到SurfaceTexture.

我们认为我们可以使用CameraConstrainedHighSpeedCaptureSession在Nexus 5上使用Camera2 API执行此操作但是未成功.

互联网上目前没有功能代码(至少我们已经删除过的部分)允许这样做,但似乎可能存在功能.

使用Camera2 API进行高速录制的最佳示例如下:https://github.com/PkmX/lcamera

为了鼓励某人发布解决方案,我正在对这个问题给予赏金.

camera android preview camera2 highspeed

11
推荐指数
1
解决办法
1673
查看次数

使用Android camera2进行全屏预览

我正在使用新的camera2 API构建自定义相机.我的代码是基于谷歌提供的代码示例在这里.

我无法找到一种方法来全屏显示相机.在代码示例中,他们使用比率优化来适应所有屏幕,但它只占屏幕高度的3/4左右.

这是我的代码AutoFitTextureView:

public class AutoFitTextureView extends TextureView {

private int mRatioWidth = 0;
private int mRatioHeight = 0;

public AutoFitTextureView(Context context) {
    this(context, null);
}

public AutoFitTextureView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

/**
 * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio
 * calculated from the parameters. Note …
Run Code Online (Sandbox Code Playgroud)

camera android camera2 android-camera2

11
推荐指数
2
解决办法
8717
查看次数

在Android中使用后置双摄像头

我正试图用我的xiaomi mi 5s plus上的两个后置摄像头捕捉.当我试图使用camera2 api迭代摄像机的id时,我只得到2个id,一个用于前置摄像头,一个用于后置摄像头.我查看了lg开发示例(http://mobile.developer.lge.com/develop/sdks/lg-dual-camera/),他们使用了3个ID.运行他们的示例时,应用程序崩溃了.

用于获取ID的代码是:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
for(String id: manager.getCameraIdList())
    Log.e("test", id);
Run Code Online (Sandbox Code Playgroud)

api android camera2

11
推荐指数
1
解决办法
1545
查看次数

手动对焦于camera2,android

我正在寻找android中camera2手动对焦的一个例子.我试图获得下面显示的最小焦距和可用焦距,但它没有帮助.如何控制焦距?

float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

float[] lensDistances = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS); 
Run Code Online (Sandbox Code Playgroud)

我需要用seekbar来控制它.提前致谢.

camera android camera2

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

在Android上访问高fps相机

有一些官方支持高fps录音的手机,如Galaxy S5和S6.我试过这两个,你可以用默认的相机应用程序录制高fps视频(60甚至120 fps).(或者在S6上使用Gear VR的"直通相机"功能.)但是:当您通过标准Android API查询相机的功能时(在4.4和5.0上的S5以及5.1上的S6上尝试过它,尝试了旧的和新的所有情况下,30 fps被报告为最高可用率.这是否意味着这些手机使用私有专有API来访问高fps功能,而且没有标准方法可以访问更高的fps?这是制造商的缺点(可能会随着未来的软件版本或手机而改变)或者我只是遗漏了什么?我甚至不需要慢动作,只需高帧率相机即可实时使用,所以60 fps就足够了.

我尝试在旧相机API中查询相机fps的示例;

List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes();
List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange();
int[] c = new int[2];
camera.getParameters().getPreviewFpsRange(c);
Run Code Online (Sandbox Code Playgroud)

在camera2 API中相同:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    Range<Integer>[] fpsRange = cc.get(cc.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
}
Run Code Online (Sandbox Code Playgroud)

我只得到范围:[15,15],[24,24],[10,30],[15,30],[30,30](使用旧相机API的范围更小).

在camera2 API中,我找到了一些访问高fps摄像头录制的方法:createConstrainedHighSpeedCaptureSession().但它将高速视频录制定义为"帧速率> = 120fps",因此我甚至不需要60 fps.无论如何,我查询了这个功能,但似乎S6不支持它.我试过的代码:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    CameraCharacteristics.Key<int[]> aa = cc.REQUEST_AVAILABLE_CAPABILITIES;
    for (int i …
Run Code Online (Sandbox Code Playgroud)

camera android frame-rate camera2

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

Android Camera2 API切换后置摄像头

我正在创建一个使用新camera2 API捕获视频的自定义相机.

我的代码强力地由谷歌提供的代码启发在这里.我的相机预览有一个按钮,可以从后摄像头切换到前摄像头,然后从前摄像头切换到后摄像头.默认情况下,使用后置摄像头启动"摄像头预览"活动.

出于某种原因,当我第一次点击"开关/交换相机"按钮,它会带来前面的相机,但是每次我再次点击时,开关/交换都不再起作用了:预览(在前置摄像头上)稍微褪色,就像发生了什么事情一样,但它仍然保留在当前选择的(前置)摄像头上.

这是我的代码:

在a中RecordVideoFragment,在onViewCreated:

//  Switch camera button
        switchCameraButton = (ImageButton) view.findViewById(R.id.button_switch_camera);
        // Listener for Switch cameras button
        switchCameraButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switchCameras();
            }
        });
Run Code Online (Sandbox Code Playgroud)

这是switchCameras()功能:

private void  switchCameras() {
        mCameraOpenCloseLock.release();
        mCameraDevice.close();

        CameraManager mCameraManager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
        try {
            String mCameraId = mCameraManager.getCameraIdList()[0];
            if (mCameraId.equals("0")) {   // If currently on FRONT camera (0 = CameraCharacteristics.LENS_FACING_FRONT)
                mCameraId = "1";           // switch to BACK camera …
Run Code Online (Sandbox Code Playgroud)

camera android camera2 android-camera2

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

Camera2 API - 如何设置长曝光时间

我试图在我的应用程序中以30秒的曝光时间捕获图像(我知道这可能是因为相机允许它).

但是SENSOR_INFO_EXPOSURE_TIME_RANGE(它应该是以纳秒为单位)给出了我的范围:

13272 - 869661901
Run Code Online (Sandbox Code Playgroud)

它会在几秒钟内完成

0.000013272 - 0.869661901
Run Code Online (Sandbox Code Playgroud)

这显然不到一秒钟.

如何使用更长的曝光时间?

提前致谢!.

android android-camera android-5.0-lollipop camera2

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