问题标签 [v4l2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
raspberry-pi - quickcam 9000 pro 缺少树莓派 uvcdyntrl 对焦控制
我有一个 Logitech QuickCam 9000 Pro (V-UBM46),我无法控制我的 RaspberryPi 的焦点(所有软件包都是最新的)。
当我使用 uvcdynctrl 列出可用的网络摄像头控件时
缺少焦点控制。但是,当我在我的 Ubuntu 13.04 机器上运行相同的命令时,焦点命令存在并且我可以使用它。
我检查了 libwebcam0、uvcdynctrl、uvcdynctrl-data、libv4l-0 的版本,它们在 RaspberryPi 和 Ubuntu 上都是最新的。唯一的区别是 libv4l-0,其中 Ubuntu 上的版本是 0.8.9-4,而 RaspberryPi 是 1.0.0-1。
RaspberryPi 上是否还有其他软件包或驱动程序丢失或过时?如何让 Raspbian “看到”焦点控制?
android - 尝试在 Xperia E C1504 上打开 /dev/radio0 返回 EBUSY
我有一个根深蒂固的 Xperia E C1504,我想在它上面访问 FM 接收器芯片组,用于我正在开发的自定义 FM 收音机应用程序。问题是我对 /dev/radio0 的 fcntl open() 调用不断返回 EBUSY(错误号 16:设备或资源忙)。这是我用来尝试打开设备的代码(在根 shell 中执行):
我也尝试了 open(DEFAULT_RADIO_DEVICE,O_RDONLY),但我很确定我需要对设备的写访问权,并且仍然收到 EBUSY。
我验证了收音机设备与股票 FM Radio 应用程序一起工作,该应用程序能够调谐到一个频率并成功接收 PCM。我通过它的电源按钮图标关闭了这个应用程序(这应该释放 /dev/radio0,对吗?)并从设置->应用程序菜单中明确强制停止股票 FM Radio 应用程序,甚至删除 Radio.apk(股票 FM无线电应用程序包)从 /system/apps 使用根浏览器然后重新启动手机,但我的程序在执行上述指令时继续返回 EBUSY。
调查哪个进程可能会锁定 /dev/radio0 并杀死它的最佳方法是什么?我试过 [adb shell "su -c 'lsof /dev/radio0'"] 但返回的列表没有任何与 /dev/radio0 完全匹配的条目。'/dev/log/radio' 的例子很多,只有 'radio' 这个词有近 300 个例子,但我期待看到列出的东西正好使用 /dev/radio0。我也试过 [adb shell ps | 返回的grep radio]
kfmradio 进程看起来很可疑,所以我尝试杀死它,它没有返回任何错误,但重新运行上面过滤的 ps 列表显示 kfmradio 仍在进程列表中(我想操作系统重新启动它?)有关故障排除的任何建议fcntl open() 调用的 EBUSY 返回将非常有帮助。
设备型号:索尼 Xperia E C1504
Linux内核:3.4.0
安卓操作系统:4.1.1
固件版本:Stock Kernel Xperia E C1505_11.3.A.0.47(应该也适用于 C1504)
植根于:SRSRoot 和“Gandalf”漏洞利用。
linux-device-driver - 了解网络摄像头的 Linux 设备驱动程序
据我所知,设备驱动程序是软件的一部分,它能够与连接到计算机的特定类型的设备进行通信。
对于 USB 网络摄像头,负责的驱动程序是支持任何符合 UVC 的设备的 UVC。这意味着使操作系统或其他计算机程序能够访问硬件功能,而无需知道正在使用的硬件的精确细节。
出于这个原因,我通过运行以下命令安装了 UVC Linux 设备驱动程序:
网络摄像头已被 Linux 内核识别:dev/video0
. 但是,我仍然无法使用 FFmpeg 执行视频流,因为我缺少 V4L2 API。我通过配置内核安装了 V4L2。
我的查询是:
- UVC驱动和V4L2是如何联系在一起的?
- V4L2 API 的目的是什么?
- 如果我没有先安装UVC,它会与V4L2一起安装吗?
LinuxTV 指的是:uvcvideo 驱动程序实现仅遵循 V4L2 API。这意味着 UVC 是 V4L2 API 的一部分吗?
linux - 您如何处理来自摄像机的实时流的 V4L2 中的单个帧?
我在通过 V4L2 做某事时遇到问题;我也是这方面的初学者,所以一个解释我的一些问题的文档的链接将非常有价值。
所以我的情况是这样的:我正在制作一个计算机视觉模块,我需要的是让相机连续捕捉视频而不将其实际保存在磁盘上(或将整个内容存储在内存中)但允许我处理单个帧。我假设我可能没有处理每一帧的处理能力,所以我需要跳过一些。所以当我在一帧上完成我的逻辑时,我想抓住我的相机看到的任何最新事物并对其进行一些处理。同时,正如我所说,我不需要将视频存储在内存中,但如果我有某种容量有限的循环缓冲区也没关系。
我试过这些教程:http: //jayrambhia.wordpress.com/2013/07/03/capture-images-using-v4l2-on-linux/ http://linuxtv.org/downloads/v4l-dvb-apis /capture-example.html
但第一个不起作用(挂在“检索框架”步骤,LED 亮起 - 任何想法为什么顺便说一句?),第二个没有让我了解如何完成我的任务。一般来说,我的相机在我的 Linux 设备上运行良好——我已经使用 GUI 工具进行了检查。
所以我的问题可以大致分为以下几个方面: 1. 如上所述,您如何访问各个帧?那里的一般方法是什么?您知道的在线具体示例或文章吗?2. 是否可以将我的帧作为易于处理格式的二维数组,例如 RGB?我基本上想通过 (x,y) 坐标访问每个像素并获取 R、G 和 B 通道
我将不胜感激任何帮助,包括链接;我暂时远离原始 API 列表,因为我需要先了解总体思路,但如果没有其他方法,我当然会阅读这些内容:)
c - 列出可用的捕获格式
作为 V4L 的新手,我决定开始使用 video4linux2 库,以便用 C 语言从我的相机中捕获一帧(我正在使用带有 Ricoh Co. 相机的 uvcvideo 模块)。我遵循了几个指南和教程,并设法获得了一个正在运行的程序。我的问题主要是关于这个通常的代码行:
这是我设置捕获时使用的实际视频格式的地方。如您所见,在此示例中,我使用的是 MJPEG ( http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L390 )。尽管这可能是一种很好的格式,但我的应用程序可能需要简单的 RGB 格式,我猜是每个像素的像素。出于这个原因,我尝试使用 RGB 格式常量,例如V4L2_PIX_FMT_RGB24
. 现在由于某种原因...... v4l2 不喜欢它。我猜这与硬件有关,但我想尽可能避免 MJPEG 操作。出于测试目的,我尝试使用其他常量和格式,但无论我做什么,v4l2 都会不断更改pixelformat
字段的值:
现在我的问题是:有没有一种方法可以获得可接受的视频格式列表(我的意思是,被我的相机/v4l2 接受),我可以从中选择 MJPEG 以外的其他格式?如果您认为我必须坚持使用 MJPEG,您会向我推荐任何允许我操作它并最终在 GUI 框架中撤回捕获的库吗?
野蛮人测试代码
我使用以下技巧来测试我的硬件上的所有可用格式。首先,一些shell脚本来获取所有格式的列表......
...在此 C 程序中使用其输出:
该测试表明只有V4L2_PIX_FMT_YUYV
并且V4L2_PIX_FMT_MJPEG
是功能性的。有什么办法可以改善这一点,还是与硬件有关?
linux - 为什么 v4l 建议不要使用内核提供的标头?
指定 V4L2 ioctl 请求的宏和定义位于 videodev2.h 头文件中。应用程序应该使用他们自己的副本,而不是在他们编译的系统上的内核源代码中包含版本。
那么,我应该将此文件从/usr/include/linux/videodev2.h
我的项目文件夹中复制还是什么?如果是,为什么?
camera - Stream webcam video (no audio) to a widget in Qt5
From the documentation of Qt5 I get it that there are many widgets and classes that deal with camera input. On the other hand the documentation reads alot like intended for mobile phone cameras or even real cameras. With a viewfinder, record and snapshot buttons etc.
All I want is a widget inside my desktop Qt5 program that lets me see the video stream of my webcam (/dev/video0, v4l2). All parameters controlled via the code. Resolution, brightness and whatever the camera supports. No GUI elements.
Minimal but working code examples are appreciated. Either C++/Qt5 or pyqt5. But a hint which classes I should use in which connection would be a start as well.
Thank you very much!
P.S. Please, no answers that consists only(!) of a link to a documentation page as if that was self-explenatory. There is a camera example but did not help me much. Otherwise I would not have to ask here.
linux-kernel - V4L2:设置控制值而不执行回调
我有一个通过 V4L2(曝光、增益等)有很多自定义控件的系统。但是,我需要其中一些控件(如定期重复的初始化序列)能够在不执行 s_ctrl 的情况下重置这些控件的当前值打回来。
我注意到发送一个 ioctl 将一个值多次设置为相同的值,只会导致对 s_ctrl 的一次实际调用。但是,我有一些相互关联的参数会改变这些“幕后”,所以我需要更新这些值,以便发送未来的值。
一个例子:
- 禁用自动增益
- 将增益设置为 100
- 打开自动增益
- 获得四处走动
- 关闭自动增益
- 将增益设置为 100 <-- 这个永远不会发生,因为它认为增益仍然是以前的 100。
android - 如何在 Android 4.4 上播放 Youtube 电影时从解码器捕获视频帧?
我需要在逐帧播放时获取 youtube 电影,因为它们被绘制到屏幕上。有没有办法使用 v4l2 / /dev/ion 或其他方法来获取显示的帧?
我知道,有新的 screenrecord 二进制文件。但我不想记录屏幕,只是在显示时获取电影帧(最好的全分辨率) - 与显示的电影大小无关。检测重新缓冲也很重要。冻结期间不应返回任何帧,而不是旋转圆圈。非常感谢任何提示!
gstreamer - Gstreamer 视频流错误并中断 /dev/video 源
该管道是我与 Logitech C920 摄像头一起使用的流水线 H264 视频,如下所示:
(三通用于拆分以便稍后保存流)
该管道有效。但是,一段时间后,管道会崩溃:
这通常没问题,但是通过这种方式崩溃,视频对象(/dev/video1)被破坏并消失。一旦我拔下并重新插入相机,它就会再次出现。我正在远程控制它,所以我无法以这种方式重置相机。
这怎么发生的?有没有办法解决这个问题?某种重建 /dev/video* 对象的方法?
Edit1:在弄乱了管道之后,这显然有效:
gst-launch-1.0 -v -e v4l2src device=/dev/video1 !视频/x-h264,宽度=1280,高度=720,帧率=30/1!三通名称=t!队列 !h264解析!rtph264pay!udpsink 主机=127.0.0.1 端口=1234
我只是将 h264parse 移到了发球台之后。仍然不知道为什么会这样,或者最初的问题是什么。