今回はガイドカメラに必要なパラメータのみを設定できるように改造します。
v4l2ucp プロジェクトサイト
必要なライブラリをインストール。
$ sudo apt-get install libv4l-0 libv4l-dev
ソースをダウンロードして展開
$ wget http://jaist.dl.sourceforge.net/project/v4l2ucp/v4l2ucp/2.0/v4l2ucp-2.0.2.tar.bz2
$ tar -xvf v4l2ucp-2.0.2.tar.bz2
ガイドカメラとして必要なパラメータのみを表示するパッチ。
v4l2ucp_filter.patch
diff -u v4l2ucp-2.0.2.org/src/mainWindow.cpp v4l2ucp-2.0.2/src/mainWindow.cpp
--- v4l2ucp-2.0.2.org/src/mainWindow.cpp 2010-01-23 23:52:12.000000000 +0900
+++ v4l2ucp-2.0.2/src/mainWindow.cpp 2015-07-06 10:19:18.176883713 +0900
@@ -144,6 +144,17 @@
grid->setLayout(gridLayout);
//sv->setWidget(grid);
+ QLabel *l = new QLabel((const char *)cap.driver, grid);
+ gridLayout->addWidget(l, 0, 0);
+ l = new QLabel((const char *)cap.card, grid);
+ gridLayout->addWidget(l, 0, 1);
+ l = new QLabel((const char *)cap.bus_info, grid);
+ gridLayout->addWidget(l, 0, 2);
+ str.sprintf("0x%08x", cap.capabilities);
+ l = new QLabel(str, grid);
+ gridLayout->addWidget(l, 0, 3);
+
+/*
QLabel *l = new QLabel("driver", grid);
gridLayout->addWidget(l, 0, 0);
l = new QLabel((const char *)cap.driver, grid);
@@ -182,6 +193,7 @@
gridLayout->addWidget(l);
l = new QLabel(grid);
gridLayout->addWidget(l);
+
str.sprintf("0x%08x", cap.capabilities);
l = new QLabel("capabilities", grid);
@@ -192,6 +204,7 @@
gridLayout->addWidget(l);
l = new QLabel(grid);
gridLayout->addWidget(l);
+*/
struct v4l2_queryctrl ctrl;
@@ -237,9 +250,31 @@
v4l2_close(fd);
}
+
+void MainWindow::query_filter(struct v4l2_queryctrl *ctrl)
+{
+ switch(ctrl->id) {
+ case V4L2_CID_BRIGHTNESS:
+ case V4L2_CID_CONTRAST:
+ case V4L2_CID_GAMMA:
+ case V4L2_CID_EXPOSURE:
+ case V4L2_CID_AUTOGAIN:
+ case V4L2_CID_GAIN:
+ case V4L2_CID_SHARPNESS:
+ case V4L2_CID_EXPOSURE_AUTO:
+ case V4L2_CID_EXPOSURE_ABSOLUTE:
+ case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
+ break;
+ default:
+ ctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
+ }
+}
+
void MainWindow::add_control(struct v4l2_queryctrl &ctrl, int fd, QWidget *parent, QGridLayout *layout)
{
QWidget *w = NULL;
+
+ query_filter(&ctrl);
if(ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
return;
@@ -273,6 +308,8 @@
return;
}
+ layout->setHorizontalSpacing(0);
+ layout->setVerticalSpacing(0);
layout->addWidget(w);
if(ctrl.flags & V4L2_CTRL_FLAG_GRABBED) {
w->setEnabled(false);
diff -u v4l2ucp-2.0.2.org/src/mainWindow.h v4l2ucp-2.0.2/src/mainWindow.h
--- v4l2ucp-2.0.2.org/src/mainWindow.h 2009-09-11 05:02:50.000000000 +0900
+++ v4l2ucp-2.0.2/src/mainWindow.h 2015-06-18 16:03:17.521252543 +0900
@@ -60,4 +60,5 @@
MainWindow(QWidget *parent=0, const char *name=0);
void add_control(struct v4l2_queryctrl &ctrl, int fd, QWidget *parent, QGridLayout *);
+ void query_filter(struct v4l2_queryctrl *ctrl);
};
diff -u v4l2ucp-2.0.2.org/src/v4l2ctrl.c v4l2ucp-2.0.2/src/v4l2ctrl.c
--- v4l2ucp-2.0.2.org/src/v4l2ctrl.c 2009-11-12 04:23:24.000000000 +0900
+++ v4l2ucp-2.0.2/src/v4l2ctrl.c 2015-07-06 11:03:53.800210389 +0900
@@ -26,7 +26,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <linux/types.h>
-#include <linux/videodev.h>
+#include <linux/videodev2.h>
#include <libv4l2.h>
#define FORMATW "%u:%31s:%d\n"
パッチ当て
$ cd
$ patch --ignore-whitespace -p1 -d v4l2ucp-2.0.2 < v4l2ucp_filter.patch
patching file src/mainWindow.cpp
patching file src/mainWindow.h
patching file src/v4l2ctrl.c
makeする。
$ cd v4l2ucp-2.0.2
$ mkdir build
$ cd build
$ cmake ..
$ make
v4l2ucp-2.0.2/build/src/v4l2ctrl が実行ファイル
$ sudo cp src/v4l2ucp /usr/local/bin/
当方で個人的に改造したソースを放流しています。
詳しくは norikyuバージョン を参照してください。
0 件のコメント:
コメントを投稿