小编Tob*_*eis的帖子

Android camera2 jpeg帧率

我试图在Android设备上保存具有固定帧率(最好高达30)的图像序列,具有相同功能的camera2(Galaxy S7),但我无法a)获得稳定的帧率,b)达到甚至20fps(使用jpeg)编码).我已经包含了Android camera2捕获突发的建议太慢了.

根据,JPEG的最小帧持续时间是33.33毫秒(对于低于1920x1080的分辨率)

characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputMinFrameDuration(ImageFormat.JPEG, size);
Run Code Online (Sandbox Code Playgroud)

并且每个尺寸的稳定度为0ms(类似于YUV_420_888).

我的捕获构建器如下所示:

captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CONTROL_AE_MODE_OFF);
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, _exp_time);
captureBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true);

captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, _iso_value);

captureBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, _foc_dist);
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CONTROL_AF_MODE_OFF);

captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, _wb_value);

// https://stackoverflow.com/questions/29265126/android-camera2-capture-burst-is-too-slow
captureBuilder.set(CaptureRequest.EDGE_MODE,CaptureRequest.EDGE_MODE_OFF); 
captureBuilder.set(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE, CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE_OFF);
captureBuilder.set(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF);
captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);

// Orientation
int rotation = getWindowManager().getDefaultDisplay().getRotation();           
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION,ORIENTATIONS.get(rotation));
Run Code Online (Sandbox Code Playgroud)

焦距设置为0.0(inf),iso设置为100,曝光时间设置为5ms.白平衡可以设置为OFF/AUTO/ANY VALUE,不会影响下面的时间.

我使用以下命令启动捕获会话:

session.setRepeatingRequest(_capReq.build(), captureListener, mBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

注意:如果我请求RepeatingRequest或RepeatingBurst,它没有区别.

在预览中(仅附加纹理表面),一切都是30fps.但是,只要我附加了一个图像阅读器(在HandlerThread上运行的监听器),我将其实例化如下(不保存,只测量帧之间的时间):

reader = ImageReader.newInstance(_img_width, _img_height, ImageFormat.JPEG, 2);
reader.setOnImageAvailableListener(readerListener, mBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

使用时间测量代码:

ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(ImageReader myreader) {
        Image image = null;

        image = myreader.acquireNextImage();
        if (image …
Run Code Online (Sandbox Code Playgroud)

android jpeg image yuv camera2

5
推荐指数
1
解决办法
3022
查看次数

标签 统计

android ×1

camera2 ×1

image ×1

jpeg ×1

yuv ×1