列出可用的捕获格式

2024-01-02

作为 V4L 的新手,我决定开始使用 video4linux2 库,以便用 C 语言从我的相机捕获帧(我正在将 uvcvideo 模块与 Ricoh Co. 相机一起使用)。我遵循了一些指南和教程,并设法获得了一个正在运行的程序。我的问题主要是关于这个常用的代码行:

struct v4l2_format format = {0};
format.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
// ...

这是我设置捕获时使用的实际视频格式的地方。如您所见,在此示例中,我使用 MJPEG (http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L390 http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L390)。尽管这可能是一种很棒的格式,但我猜我的应用程序可能需要简单的 RGB 格式(逐像素)。因此,我尝试使用 RGB 格式常量,例如V4L2_PIX_FMT_RGB24。现在由于某种原因...... v4l2 不喜欢它。我猜这与硬件有关,但我想尽可能避免 MJPEG 操作。出于测试目的,我尝试使用其他常量和格式,但无论我做什么,v4l2 都会不断更改pixelformat字段的值:

xioctl(fd, VIDIOC_S_FMT, &format); // This call succeeds with errno != EINTR.
if(format.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24){
    // My program always enters this block when not using MJPEG.
    fprintf(stderr, "Format wasn't accepted by v4l2.");
    exit(4);
}

现在我的问题是:有没有办法获得可接受的视频格式列表(我的意思是,被我的相机/v4l2接受),我可以从中选择 MJPEG 以外的其他格式?如果您认为我必须坚持使用 MJPEG,您会向我推荐任何允许我操作它并最终在 GUI 框架中提取捕获的库吗?

野蛮人测试代码

我使用以下技巧来测试我的硬件上的所有可用格式。首先,一些 shell 脚本来获取所有格式的列表......

grep 'V4L2_PIX_FMT' /usr/include/linux/videodev2.h | grep define | tr '\t' ' ' | cut -d' ' -f2 | sed 's/$/,/g'

...其输出用于此 C 程序:

int formats[] = {/* result of above command */};
int i = 0;
struct v4l2_format format = {0};

for(i = 0; i < /* number of lines in previous command output */; i++){
    format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    format.fmt.pix.width = 320;
    format.fmt.pix.height = 240;
    format.fmt.pix.pixelformat = formats[i];
    format.fmt.pix.field = V4L2_FIELD_NONE;
    if(xioctl(fd, VIDIOC_S_FMT, &format) != -1 && format.fmt.pix.pixelformat == formats[i])
        fprintf(stderr, "Accepted : %d\n", i);
}

该测试表明,仅V4L2_PIX_FMT_YUYV and V4L2_PIX_FMT_MJPEG是功能性的。有什么办法可以改善这个问题,还是与硬件有关?


在 Linux 中,命令行实用程序v4l2-ctl显示网络摄像头本机支持的所有格式 - 安装它sudo apt-get install v4l-utils,运行它v4l2-ctl -dX --list-formats-ext where X是相机索引,如下所示/dev/videoX。这些格式报告给v4l2内核模块通过uvcvideo模块,并且它们由网络摄像头芯片组本身支持。仅支持列出的格式v4l2,其他任何内容都需要由用户编码,并且 RGB 是very尽管几乎所有 CCD 都在拜耳 RGGB 中工作,但很少提供。迄今为止最常见的格式是 YUV422(YUYV 或YUY2 http://www.fourcc.org/yuv.php#YUY2) 和 MJPEG,有一定的重叠:MJPEG 可在大分辨率下实现更高的帧速率。

用于列出相机格式的 C++ 代码可以在 Linux 的 Chromium GetDeviceSupportedFormats() 实现中找到.

如果您必须插入代码将 YUV 转换为 RGB 我建议libyuv https://code.google.com/p/libyuv/它已针对大量架构进行了优化。

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

列出可用的捕获格式 的相关文章

  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • for 循环 - 没有效果的语句

    由于某种原因 我收到错误 statement with no effect关于这个声明 for j idx j lt iter j increment printf from loop idx i int idx punc ctxt j 你
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • OpenMP C 程序运行速度比顺序代码慢

    我是 OpenMP 的新手 正在尝试并行化 Jarvis 的算法 然而事实证明 与顺序代码相比 并行程序花费的时间要长 2 3 倍 难道问题本身就不能并行化吗 或者我并行化它的方式有问题 这是我针对该问题的 openMP 程序 其中有 2
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 通过 MSBuild 调用 cl.exe 时无限期挂起

    我正在尝试在我的 主要是 C 项目上运行 MSBuild 想象一下一个非常庞大的代码库 Visual Studio 2015 是有问题的工具集 Windows 7 SP1 和 VS 2015 更新 2 即使使用 m 1 从而迫使它仅使用一个
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm

随机推荐

  • 有关使用 AWS RDS 环境变量连接到我的 AWS RDS 数据库的问题

    在 AWS 上托管的 Flask SQLAlchemy 应用程序中 我通过构建数据库连接 URI 利用与应用程序环境关联的 RDS 实例添加的环境变量 application config SQLALCHEMY DATABASE URI m
  • 检测 iOS 上的亮度变化是用户操作还是自动操作

    我发现我可以通过注册为观察者来检测屏幕亮度的变化UIScreenBrightnessDidChangeNotification void viewDidLoad super viewDidLoad NSNotificationCenter
  • 线程“main”中的异常 java.lang.NoClassDefFoundError:使用 Selenium 和 Java 的 okhttp3/ConnectionPool

    我有一个简单的硒测试代码 public static void main String args System setProperty webdriver chrome driver home chromedriver WebDriver
  • Windows 记事本不支持换行符 '\n'

    从我的 iPhone 应用程序中 我将数据从文本输出到文件 当用Windows记事本打开时 数据全部在一行上 并且应该有一个新行的地方出现了一个块字符 表明它是一个无法识别的字符或其他字符 当用windows写字板打开时 它显示得很好 我的
  • 在PowerShell中获取USB驱动器的盘符

    我看过 C 和其他一些语言的文章解释了如何实现我正在寻找的目标 但我不知道如何转换它们 以下链接解释了如何获得答案 如何获取USB设备的盘符 https stackoverflow com questions 6653205 how can
  • C中的typedef结构问题

    我面临一个奇怪的问题 我在 C 头文件中定义了一个结构 typedef struct iRecActive char iRecSID 32 unsigned char RecStatus int curSel iRecAcitve t 但是
  • 使用 htaccess 重写 PHP url

    http www example com justridesbeta jstride vehicle to http www example com justridesbeta addride 使用 htaccess 目前使用
  • 为什么在 C# 中 Queue 会扰乱其元素中的数据?

    我对我的队列的功能完全感到困惑 我正在尝试 但失败了 写 一个小型多线程应用程序 用于用 C 收集和显示数据 读完后阿尔巴哈里的书 http www albahari com threading 并使用消费者 生产者 他描述的模式我大部分都
  • 如何让 Visual Studio 始终重新加载更改的解决方案、项目和文件?

    我使用多台机器来分析和运行一个解决方案 并通过 DropBox 完成数据同步 太棒了 顺便说一句 不幸的是 一台机器的更改会导致所有其他机器的 VS 实例询问我是否要重新加载 这很烦人 因为答案总是Yes 所以我的问题是 我可以让 VS 假
  • 在 Visual Studio 2005 中重用对象文件

    情况是这样的 我有一个包含两个项目的 VS2005 解决方案 MyDll DLL MyDllUnitTest 控制台 EXE 在 MyDll 中 我有一个名为 MyClass 的类 该类位于 DLL 内部 不应导出 我想在 MyDllUni
  • 如何在 Flutter 中使用 Streams 更新时间?

    我一直在研究流的使用 因为我认为这将是我的应用程序的最佳解决方案 我希望能够以特定的时间间隔检查时间 然后根据太阳是否升起或落下自动更改地图的主题 我有主题和太阳代码 但我需要将它们连接在一起 这是我到目前为止的代码 如果我对控制器和订阅使
  • 应用内结算连接到 Firebase 并获取产品

    I m starting to create an APP where I can buy items from it Could be like this where you can see an Image Name of produc
  • 本地字符串文字的内存分配?

    我知道当我们创建字符串文字时 它会进入永久空间 我的问题是 即使该字符串文字对于方法来说是本地的 它是否会在 jvm 的生命周期内一直存在 例如我有下面的代码片段 private static void testString1 String
  • ColdFusion:使用 UTC 创建日期时间

    我正在尝试使用 UTC 时间 以便用户可以获得 UTC 时间 而不是服务器时间 我目前正在用这个设置时间 这有效
  • 如何使用 JPA Criteria 查询编写此查询?

    任何人都可以帮我获取下面提到的 JPA 查询的 JPA 标准查询 SELECT p l FROM Person p LEFT JOIN Language l ON p language l language and l locale lik
  • 如何使 2.7 python 上下文管理器线程安全

    我有一个在 Django 服务上运行的大型 python 应用程序 我需要关闭某些操作的权限测试 因此我创建了这个上下文管理器 class OverrideTests object def init self self override 0
  • 以编程方式获取最新的 python 3 版本

    我想从这里获取最新的Python源代码https www python org ftp python https www python org ftp python 发布此内容时 最新版本是 3 9 1 我不想在代码中硬编码 3 9 1 以
  • 使用框大小调整添加边框时防止高度变化

    我无法找到描述此问题的内容 但如果我丢失了它 请告诉我 下面是一个demo 在IE11和Chrome中测试 完美地展示了问题 本质上 我试图向元素添加边框 并保持大小相同 它对于宽度来说工作得很好 但是对于高度来说 它只容纳了一半 所以我有
  • Dataproc 虚拟机内存和本地磁盘使用指标

    我正在尝试使用云指标监控 Dataproc 2 0 上的本地磁盘使用情况 百分比 这对于监控 Spark 临时文件填满磁盘的情况非常有用 默认情况下 Dataproc 似乎仅发送本地磁盘性能指标 CPU 等指标和集群级别 HDFS 指标 但
  • 列出可用的捕获格式

    作为 V4L 的新手 我决定开始使用 video4linux2 库 以便用 C 语言从我的相机捕获帧 我正在将 uvcvideo 模块与 Ricoh Co 相机一起使用 我遵循了一些指南和教程 并设法获得了一个正在运行的程序 我的问题主要是