summaryrefslogtreecommitdiff
path: root/v4l2-apps/util/qv4l2
diff options
context:
space:
mode:
Diffstat (limited to 'v4l2-apps/util/qv4l2')
-rw-r--r--v4l2-apps/util/qv4l2/qv4l2.cpp58
-rw-r--r--v4l2-apps/util/qv4l2/qv4l2.h3
2 files changed, 53 insertions, 8 deletions
diff --git a/v4l2-apps/util/qv4l2/qv4l2.cpp b/v4l2-apps/util/qv4l2/qv4l2.cpp
index a93608af2..d144723d9 100644
--- a/v4l2-apps/util/qv4l2/qv4l2.cpp
+++ b/v4l2-apps/util/qv4l2/qv4l2.cpp
@@ -31,6 +31,7 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
+#include <dirent.h>
#include "fileopen.xpm"
@@ -41,6 +42,7 @@ ApplicationWindow::ApplicationWindow()
fd = -1;
+ videoDevice = NULL;
sigMapper = NULL;
QToolBar * fileTools = new QToolBar( this, "file operations" );
fileTools->setLabel( "File Operations" );
@@ -129,17 +131,57 @@ void ApplicationWindow::setDevice(const QString &device)
setCentralWidget(tabs);
}
-void ApplicationWindow::choose()
+void ApplicationWindow::selectdev(int index)
+{
+ setDevice(videoDevice->text(index));
+}
+
+void ApplicationWindow::add_dirVideoDevice(const char *dirname)
{
- QString fn = QFileDialog::getOpenFileName( "/dev/v4l", QString::null,
- this);
- if ( !fn.isEmpty() ) {
- setDevice(fn);
- }
- else
- statusBar()->message( "Loading aborted", 2000 );
+ DIR *dir;
+ struct dirent *entry;
+ const char *vid = "video";
+ const char *rad = "radio";
+ const char *vbi = "vbi";
+ char name[512], *p;
+
+ dir = opendir(dirname);
+ if (!dir)
+ return;
+
+ strcpy(name, dirname);
+ strcat(name, "/");
+ p = name + strlen(name);
+
+ entry = readdir(dir);
+ while (entry) {
+ if (!strncmp(entry->d_name, vid, strlen(vid)) ||
+ !strncmp(entry->d_name, rad, strlen(rad)) ||
+ !strncmp(entry->d_name, vbi, strlen(vbi))) {
+ strcpy(p, entry->d_name);
+
+ videoDevice->insertItem(name);
+ }
+ entry = readdir(dir);
+ }
+ closedir(dir);
}
+void ApplicationWindow::choose()
+{
+ if (videoDevice)
+ delete videoDevice;
+
+ videoDevice = new QPopupMenu(this);
+
+ add_dirVideoDevice("/dev");
+ add_dirVideoDevice("/dev/v4l");
+
+ connect(videoDevice, SIGNAL(activated(int)), this, SLOT(selectdev(int)));
+
+ videoDevice->show();
+ videoDevice->setFocus();
+}
void ApplicationWindow::closeEvent( QCloseEvent* ce )
{
diff --git a/v4l2-apps/util/qv4l2/qv4l2.h b/v4l2-apps/util/qv4l2/qv4l2.h
index 1a0a8e15d..5421a867d 100644
--- a/v4l2-apps/util/qv4l2/qv4l2.h
+++ b/v4l2-apps/util/qv4l2/qv4l2.h
@@ -59,12 +59,14 @@ protected:
void closeEvent( QCloseEvent* );
private slots:
+ void selectdev(int);
void choose();
void ctrlAction(int);
void about();
private:
+ void add_dirVideoDevice(const char *dirname);
void addTabs();
void finishGrid(QWidget *vbox, QGrid *grid, unsigned ctrl_class, bool odd);
void addCtrl(QGrid *grid, const struct v4l2_queryctrl &qctrl);
@@ -88,6 +90,7 @@ private:
QString filename;
QSignalMapper *sigMapper;
QTabWidget *tabs;
+ QPopupMenu *videoDevice;
int fd;
CtrlMap ctrlMap;
WidgetMap widgetMap;