捕获 Camera2 预览帧返回空缓冲区

2024-03-21

我一直在开发一个简单的 Android 应用程序,旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法。我已经制作了几个应用程序,忠实地使用 Android Camera1 API 执行此操作,但即使在检查(Google 文档、论坛)以确认正确的编码之后,我也无法从 onImageAvailable() 中的 ImageReader 捕获任何真实数据。请注意以下相关代码:

  1. 设置图像读取器:

    private void setUpCameraOutputs(int width, int height) {
    
    [....code....]
    
    mImageReader = ImageReader.newInstance(smallestJPEG.getWidth(), 
                                           smallestJPEG.getHeight(),
                                           ImageFormat.JPEG, /*maxImages*/2);
    // mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null);
    mPreviewImageReader = ImageReader.newInstance(smallest.getWidth(), 
                                                  smallest.getHeight(), 
                                                  ImageFormat.YUV_420_888, 2);
    mPreviewImageReader.setOnImageAvailableListener(mOnPreviewImageAvailableListener,
                                                    mBackgroundHandler);
    
    [....code....]
    
    }
    
  1. 设置捕获会话:

    private void createCameraPreviewSession() {
    try {
        //Create Texture from Screen's TextureView
        SurfaceTexture texture = mTextureView.getSurfaceTexture();
    
        assert texture != null;
    
        //Configure Default Buffer Size
        texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    
        //Create Output Surface from Texture
        Surface surface = new Surface(texture);
    
        // Set up a CaptureRequest.Builder with the output Surface.
        mPreviewRequestBuilder
                = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
    
        //Add Output Display surface
        mPreviewRequestBuilder.addTarget(surface);
    
        //Add Preview frame-grabbing surface 
        mPreviewRequestBuilder.addTarget(mPreviewImageReader.getSurface());
    
        mCameraDevice.createCaptureSession(Arrays.asList(surface, mPreviewImageReader.getSurface()),
                new CameraCaptureSession.StateCallback() {
    
                    @Override
                    public void onConfigured(CameraCaptureSession cameraCaptureSession) {
                        // The camera is already closed
                        if (null == mCameraDevice) {
                            return;
                        }
    
                        // When the session is ready, we start displaying the preview.
                        mCaptureSession = cameraCaptureSession;
                        try {
                            // Auto focus should be continuous for camera preview. [...code...]
                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
                            // Flash is automatically enabled when necessary.
                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                                    CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
    
                            // Finally, we start displaying the camera preview.
                            mPreviewRequest = mPreviewRequestBuilder.build();
                            mCaptureSession.setRepeatingRequest(mPreviewRequest,
                                    mCaptureCallback, mBackgroundHandler);
                        } catch (CameraAccessException e) {
                            [...code...]
                        }
                    }
    
                    @Override
                    public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {
                        [...code...]
                    }
                }, null
        );
    } catch (CameraAccessException e) {
        [...code...]
    }
    }
    
  1. 设置 OnImageAvailableListener:

    private ImageReader mPreviewImageReader;
    private final ImageReader.OnImageAvailableListener mOnPreviewImageAvailableListener
    = new ImageReader.OnImageAvailableListener() {
    
    @Override
    public void onImageAvailable(ImageReader reader) {
    
        //Acquire Image, ByteBuffer, then byte array
        Image image = reader.acquireLatestImage();
        ByteBuffer buffer = image.getPlanes()[0].getBuffer();
        byte[] bytes = new byte[buffer.remaining()];
    
        //Check bytes array for anydata
        int cnt = 0;
        for (int i = 0; i < bytes.length; i++){
            if (bytes[i] != 0)cnt++;
        }
        Log.i(TAG, "cnt = " + cnt);
        image.close();
    
        //At this point, byte[] bytes is empty (all zero)
        [...code...]
    }
    
    };
    

在代码片段 #3 中,无论 ImageReader 格式如何,我的字节缓冲区始终返回空(全零)。有人遇到过这个问题吗?我是否缺少任何代码?


add 缓冲区.get(字节);byte[] bytes = new byte[buffer.remaining()];

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获 Camera2 预览帧返回空缓冲区 的相关文章

  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的
  • 处理 Android 锁屏上的音量变化?

    我想做的是 能够在 android 4 4 上的锁屏上捕获音量增大 减小按钮操作 Google Cast 设计清单 https developers google com cast docs design checklist sender
  • 如何从一个活动中完成一系列开放的子活动?

    我正在尝试为我的应用程序制作一个退出按钮 无论如何 我能够跟踪我的应用程序中的所有活动实例 然后完成它们 但在某些情况下 仍有一些活动仍然存在 不知道怎么办 有没有什么方法可以杀死android中的特定应用程序 或者我可以通过任何其他方式退
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 如何读取大型平面文件

    我有一个平面文件 其中包含 339276 行文本 大小为 62 1 MB 我试图读入所有行 根据我所拥有的某些条件解析它们 然后将它们插入数据库 我最初尝试使用 bufio Scan 循环和 bufio Text 来获取该行 但缓冲区空间不
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 如何在 kotlin 中检查 lambda 空值

    在 Kotlin 中如何检查 lambda 是否为空 例如 我有这样的签名 onError Throwable gt Unit 我如何区分它的默认值是应用于主体还是应用于此函数的值 您无法测试 lambda 的主体是否为空 因此它不包含源代
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 如何通过 AppCompatActivity 使用 YouTube Android 播放器 API

    为了在我的应用程序中播放视频 我决定扩展 YouTube Android Player API 但问题是我的菜单消失了 因为我没有从 AppCompatActivity 扩展 问题是 如何使用 YouTube Android Player
  • 使用 RecyclerView.Adapter 在 onBindViewHolder() 内设置 onItemClickListener

    我有一个自定义对象 学生班 public class Student private String name private String age public String getName return name public void
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且

随机推荐

  • 解密xml文档时出现问题

    我编写了一些代码来加密包含用户凭据的 XML 配置文件 以及解密该文件的代码 当我在本地计算机上同时运行加密和解密时 它按预期工作 但是 当我部署程序时 仅使用解密代码 xml 文件将无法解密 我收到加密异常 错误数据 这是我的代码 pub
  • FutureWarning:不推荐使用非元组序列进行多维索引,使用“arr[tuple(seq)]”

    我搜索过 S O 但找不到答案 当我尝试使用 seaborn 绘制分布图时 我收到了未来警告 我想知道这里可能出了什么问题 import pandas as pd import numpy as np import seaborn as s
  • 为什么 PHP 中的 _GET 会错误地解码斜杠?

    今天我遇到了 PHP 的一些奇怪问题 我在文档中找不到正确的解释 考虑以下代码 代码很简单 它在 url 上采用单个 t 参数并将其输出回来 因此 如果您使用 test php t 5Ca 5c 是 调用它 我希望看到 a 然而 这就是我得
  • JavaScript 生成 dataURL 格式的透明 1X1 像素

    我想知道一种在 JavaScript 中生成单个像素并将其转换为 base64 的方法 理想的函数是 function createPixel hexColor opacity Calculate return base64DataURL
  • 为什么 Gensim doc2vec 给出 AttributeError: 'list' object has no attribute 'words'?

    我正在尝试使用以下代码来实验 gensim doc2vec 据我从教程中了解到 它应该有效 然而它给出了属性错误 列表 对象没有属性 单词 from gensim models doc2vec import LabeledSentence
  • 我可以用javascript创建下雨效果吗?

    我需要为我的网站实现这样的目标 闪光雨效果 http active tutsplus com tutorials effects create a rain effect in flash using actionscript 30 这可以
  • 在 64 位机器上,我可以安全地并行操作 64 位四字的各个字节吗?

    背景 我正在对图像中的行和列进行并行操作 我的图像是 8 位或 16 位像素 而我使用的是 64 位机器 当我并行对列进行操作时 两个相邻列可能共享相同的 32 位int或 64 位long 基本上 我想知道是否可以安全地并行操作同一四字的
  • 忽略正则表达式匹配中的换行符

    我正在尝试使用以下脚本将所有匹配的事件替换为标题大小写 当过滤词之间有换行符 在本例中为 ABC 和 DEF 时 该行不会按预期被替换 在这种情况下如何忽略换行符 编辑 我不想从字符串中完全删除所有换行符 而只想删除过滤词之间的换行符 Ed
  • 加载 YouTube 视频并收听 onPlayerStateChange

    单击链接后 我尝试播放 YouTube 视频 并在播放完毕后用图像替换该视频 上半场很轻松 然而我在下半场遇到了麻烦 最初我只是简单地附加了一个iframe嵌入 然而要听ENDED事件中 我尝试遵循 YouTube 开发文档 现在 我似乎什
  • DB2 v9.5 类型 2 驱动程序的 JPA 2.0 Provider Hibernate 3.6 在配置准备中抛出异常

    JPA 2 0 Provider Hibernate 在为实体管理器工厂准备配置时抛出异常 我正在使用 DB2 v9 5 数据库和 DB2 v9 5 JDBC 类型 2 驱动程序 java sql SQLException IBM JDBC
  • Python 有同步吗?

    The 同步手册页 http linux die net man 2 sync says sync 导致对文件元数据和数据的所有缓冲修改 写入底层文件系统 Python 是否有调用来执行此操作 附 不是fsync http docs pyt
  • 在运行时更改 AR core 中对象的纹理

    我正在创建一个应用程序 我需要在其中更改 3d 对象的纹理 图案 我正在使用 AR Core SDK 和 android 我已经使用了下面的代码 但它不起作用 Texture builder setSource this R drawabl
  • Clojure 中的块注释

    如何在 Clojure 中注释多行 其实 还有办法 comment 定义嘿 嘿 对我进行检查
  • 使用 DT(DataTables 按钮扩展)导出表格时保持格式

    我制作了一个闪亮的应用程序 有人上传文件 计算一些比率 并且可以使用阈值滑块来格式化这些比率 我用DT formatStyle为此 它工作得非常好 据我了解这个函数 它创建一个回调来处理条件格式 然后 我想使用按钮扩展导出数据DT 我想在导
  • 正则表达式在 if 语句中将字符串与空格匹配(使用引号?)

    我将如何进行如下所示的正则表达式匹配 但在 This 周围加上引号 就像在现实世界中 This 将是一个可以在其中包含空格的字符串 bin bash text This is just a test string if text This
  • 分布式事务:.NET Framework 与 .NET Core

    我有以下代码示例 static void Main string args TransactionManager DistributedTransactionStarted sender eventArgs gt Console Write
  • SSE 和 AVX MoveMask 的用途是什么

    问题 MoveMask 的目的或意图是什么 学习如何使用 x86 x86 64 汇编 SSE AVX 的最佳地点是哪里 我可以更有效地编写代码吗 提问原因 我有一个用 F for NET 编写的使用 SSE2 的函数 我使用 AVX2 写了
  • 仅检索 Java 类中声明的静态字段

    我有以下课程 public class Test public static int a 0 public int b 1 是否可以使用反射来仅获取静态字段的列表 我知道我可以获得所有字段的数组Test class getDeclaredF
  • Android Google 地图 v2 删除默认标记

    我在我的 Android 应用程序中实现了 Android Google Maps v2 没有任何问题 但是 地图包含一些我未包含的 默认标记 我的意思是 一些私人营业地点 是否可以从地图上删除这些标记 以便我只获得城市名称和街道名称 只需
  • 捕获 Camera2 预览帧返回空缓冲区

    我一直在开发一个简单的 Android 应用程序 旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法 我已经制作了几个应用程序 忠实地使用 Android Camera1 API 执行此操作 但即使在检查 Goo