From: Hans Verkuil Date: Mon, 23 Jun 2014 07:33:53 +0000 (+0200) Subject: qv4l2-qt3: remove utility X-Git-Tag: v4l-utils-1.2.0~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=20357830fd637f7462201d98415ca877d540bdaf;p=platform%2Fupstream%2Fv4l-utils.git qv4l2-qt3: remove utility qv4l2-qt3 has been superseded by qv4l2. Nobody uses Qt3 anymore and this qt3 version of qv4l2 hasn't been maintained for a long time. Time to retire it. Signed-off-by: Hans Verkuil --- diff --git a/contrib/Makefile.am b/contrib/Makefile.am index ef53830..196259f 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -17,7 +17,6 @@ EXTRA_DIST = \ em28xx \ m920x \ pci_traffic \ - qv4l2-qt3 \ saa7134 \ sn9c201 \ tm6000 \ diff --git a/contrib/qv4l2-qt3/.gitignore b/contrib/qv4l2-qt3/.gitignore deleted file mode 100644 index 92036ca..0000000 --- a/contrib/qv4l2-qt3/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -Makefile -moc_general-tab.cpp -moc_qv4l2.cpp -qv4l2 - diff --git a/contrib/qv4l2-qt3/Makefile.install b/contrib/qv4l2-qt3/Makefile.install deleted file mode 100644 index 22c0207..0000000 --- a/contrib/qv4l2-qt3/Makefile.install +++ /dev/null @@ -1,5 +0,0 @@ -include Makefile - -install: qv4l2 - mkdir -p $(DESTDIR)$(PREFIX)/bin - install -m 755 qv4l2 $(DESTDIR)$(PREFIX)/bin diff --git a/contrib/qv4l2-qt3/ctrl-tab.cpp b/contrib/qv4l2-qt3/ctrl-tab.cpp deleted file mode 100644 index 6f436b4..0000000 --- a/contrib/qv4l2-qt3/ctrl-tab.cpp +++ /dev/null @@ -1,592 +0,0 @@ - -#include "qv4l2.h" -#include "libv4l2util.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -void ApplicationWindow::addTabs() -{ - struct v4l2_queryctrl qctrl; - unsigned ctrl_class; - unsigned i; - int id; - - memset(&qctrl, 0, sizeof(qctrl)); - qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL; - while (::ioctl(fd, VIDIOC_QUERYCTRL, &qctrl) == 0) { - if ((qctrl.flags & V4L2_CTRL_FLAG_DISABLED) == 0) { - ctrlMap[qctrl.id] = qctrl; - if (qctrl.type != V4L2_CTRL_TYPE_CTRL_CLASS) - classMap[V4L2_CTRL_ID2CLASS(qctrl.id)].push_back(qctrl.id); - } - qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; - } - if (qctrl.id == V4L2_CTRL_FLAG_NEXT_CTRL) { - strcpy((char *)qctrl.name, "User Controls"); - qctrl.id = V4L2_CTRL_CLASS_USER | 1; - qctrl.type = V4L2_CTRL_TYPE_CTRL_CLASS; - ctrlMap[qctrl.id] = qctrl; - for (id = V4L2_CID_USER_BASE; id < V4L2_CID_LASTP1; id++) { - qctrl.id = id; - if (::ioctl(fd, VIDIOC_QUERYCTRL, &qctrl)) - continue; - if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - ctrlMap[qctrl.id] = qctrl; - classMap[V4L2_CTRL_CLASS_USER].push_back(qctrl.id); - } - for (qctrl.id = V4L2_CID_PRIVATE_BASE; - ::ioctl(fd, VIDIOC_QUERYCTRL, &qctrl) == 0; qctrl.id++) { - if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - ctrlMap[qctrl.id] = qctrl; - classMap[V4L2_CTRL_CLASS_USER].push_back(qctrl.id); - } - } - - for (ClassMap::iterator iter = classMap.begin(); iter != classMap.end(); ++iter) { - ctrl_class = V4L2_CTRL_ID2CLASS(iter->second[0]); - id = ctrl_class | 1; - const struct v4l2_queryctrl &qctrl = ctrlMap[id]; - QVBox *vbox = new QVBox(tabs); - QGrid *grid = new QGrid(4, vbox); - grid->setSpacing(3); - tabs->addTab(vbox, (char *)qctrl.name); - for (i = 0; i < iter->second.size(); i++) { - if (i & 1) - id = iter->second[(1+iter->second.size()) / 2 + i / 2]; - else - id = iter->second[i / 2]; - addCtrl(grid, ctrlMap[id]); - } - finishGrid(vbox, grid, ctrl_class, i & 1); - } -} - -void ApplicationWindow::finishGrid(QWidget *vbox, QGrid *grid, unsigned ctrl_class, bool odd) -{ - if (odd) { - new QWidget(grid); - new QWidget(grid); - } - QWidget *stretch = new QWidget(grid); - stretch->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored); - - QFrame *frame = new QFrame(vbox); - frame->setFrameShape(QFrame::HLine); - frame->setFrameShadow(QFrame::Sunken); - frame->setMargin(3); - - QHBox *hbox = new QHBox(vbox); - hbox->setSpacing(3); - - QCheckBox *cbox = new QCheckBox("Update on change", hbox); - widgetMap[ctrl_class | CTRL_UPDATE_ON_CHANGE] = cbox; - connect(cbox, SIGNAL(clicked()), sigMapper, SLOT(map())); - sigMapper->setMapping(cbox, ctrl_class | CTRL_UPDATE_ON_CHANGE); - - stretch = new QWidget(hbox); - stretch->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - - QPushButton *defBut = new QPushButton("Set Defaults", hbox); - widgetMap[ctrl_class | CTRL_DEFAULTS] = defBut; - connect(defBut, SIGNAL(clicked()), sigMapper, SLOT(map())); - sigMapper->setMapping(defBut, ctrl_class | CTRL_DEFAULTS); - - QPushButton *refreshBut = new QPushButton("Refresh", hbox); - widgetMap[ctrl_class | CTRL_REFRESH] = refreshBut; - connect(refreshBut, SIGNAL(clicked()), sigMapper, SLOT(map())); - sigMapper->setMapping(refreshBut, ctrl_class | CTRL_REFRESH); - - QPushButton *button = new QPushButton("Update", hbox); - widgetMap[ctrl_class | CTRL_UPDATE] = button; - connect(button, SIGNAL(clicked()), sigMapper, SLOT(map())); - sigMapper->setMapping(button, ctrl_class | CTRL_UPDATE); - connect(cbox, SIGNAL(toggled(bool)), button, SLOT(setDisabled(bool))); - - cbox->setChecked(ctrl_class == V4L2_CTRL_CLASS_USER); - - refresh(ctrl_class); -} - -void ApplicationWindow::addCtrl(QGrid *grid, const struct v4l2_queryctrl &qctrl) -{ - QIntValidator *val; - QLineEdit *edit; - QString name((char *)qctrl.name); - QComboBox *combo; - struct v4l2_querymenu qmenu; - - QLabel *label = new QLabel(name, grid); - label->setAlignment(Qt::AlignRight); - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER: - if (qctrl.flags & V4L2_CTRL_FLAG_SLIDER) { - widgetMap[qctrl.id] = - new QSlider(qctrl.minimum, qctrl.maximum, - qctrl.step, qctrl.default_value, - Horizontal, grid); - connect(widgetMap[qctrl.id], SIGNAL(valueChanged(int)), - sigMapper, SLOT(map())); - break; - } - - if (qctrl.maximum - qctrl.minimum <= 255) { - widgetMap[qctrl.id] = - new QSpinBox(qctrl.minimum, qctrl.maximum, 1, grid); - connect(widgetMap[qctrl.id], SIGNAL(valueChanged(int)), - sigMapper, SLOT(map())); - break; - } - - val = new QIntValidator(qctrl.minimum, qctrl.maximum, grid); - edit = new QLineEdit(grid); - edit->setValidator(val); - widgetMap[qctrl.id] = edit; - connect(widgetMap[qctrl.id], SIGNAL(lostFocus()), - sigMapper, SLOT(map())); - connect(widgetMap[qctrl.id], SIGNAL(returnPressed()), - sigMapper, SLOT(map())); - break; - - case V4L2_CTRL_TYPE_INTEGER64: - widgetMap[qctrl.id] = new QLineEdit(grid); - connect(widgetMap[qctrl.id], SIGNAL(lostFocus()), - sigMapper, SLOT(map())); - connect(widgetMap[qctrl.id], SIGNAL(returnPressed()), - sigMapper, SLOT(map())); - break; - - case V4L2_CTRL_TYPE_BOOLEAN: - label->setText(""); - widgetMap[qctrl.id] = new QCheckBox(name, grid); - connect(widgetMap[qctrl.id], SIGNAL(clicked()), - sigMapper, SLOT(map())); - break; - - case V4L2_CTRL_TYPE_BUTTON: - label->setText(""); - widgetMap[qctrl.id] = new QPushButton((char *)qctrl.name, grid); - connect(widgetMap[qctrl.id], SIGNAL(clicked()), - sigMapper, SLOT(map())); - break; - - case V4L2_CTRL_TYPE_MENU: - combo = new QComboBox(grid); - widgetMap[qctrl.id] = combo; - for (int i = qctrl.minimum; i <= qctrl.maximum; i++) { - qmenu.id = qctrl.id; - qmenu.index = i; - if (::ioctl(fd, VIDIOC_QUERYMENU, &qmenu)) - continue; - combo->insertItem((char *)qmenu.name); - } - connect(widgetMap[qctrl.id], SIGNAL(activated(int)), - sigMapper, SLOT(map())); - break; - - default: - return; - } - sigMapper->setMapping(widgetMap[qctrl.id], qctrl.id); - if (qctrl.flags & (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE)) - widgetMap[qctrl.id]->setDisabled(true); -} - -void ApplicationWindow::ctrlAction(int id) -{ - unsigned ctrl_class = V4L2_CTRL_ID2CLASS(id); - if (ctrl_class == V4L2_CID_PRIVATE_BASE) - ctrl_class = V4L2_CTRL_CLASS_USER; - unsigned ctrl = id & 0xffff; - QCheckBox *cbox = static_cast(widgetMap[ctrl_class | CTRL_UPDATE_ON_CHANGE]); - bool update = cbox->isChecked(); - bool all = (ctrl == CTRL_UPDATE || (update && ctrl == CTRL_UPDATE_ON_CHANGE)); - - if (ctrl == CTRL_DEFAULTS) { - setDefaults(ctrl_class); - return; - } - if (ctrl == CTRL_REFRESH) { - refresh(ctrl_class); - return; - } - if (!update && !all && ctrlMap[id].type != V4L2_CTRL_TYPE_BUTTON) - return; - if (ctrl_class == V4L2_CTRL_CLASS_USER) { - if (!all) { - updateCtrl(id); - return; - } - for (unsigned i = 0; i < classMap[ctrl_class].size(); i++) { - updateCtrl(classMap[ctrl_class][i]); - } - return; - } - if (!all) { - updateCtrl(id); - return; - } - unsigned count = classMap[ctrl_class].size(); - struct v4l2_ext_control *c = new v4l2_ext_control[count]; - struct v4l2_ext_controls ctrls; - int idx = 0; - - for (unsigned i = 0; i < count; i++) { - unsigned id = classMap[ctrl_class][i]; - - if (ctrlMap[id].flags & (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE)) - continue; - c[idx].id = id; - if (ctrlMap[id].type == V4L2_CTRL_TYPE_INTEGER64) - c[idx].value64 = getVal64(id); - else - c[idx].value = getVal(id); - idx++; - } - memset(&ctrls, 0, sizeof(ctrls)); - ctrls.count = idx; - ctrls.ctrl_class = ctrl_class; - ctrls.controls = c; - if (::ioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls)) { - int err = errno; - - if (ctrls.error_idx >= ctrls.count) { - printf("error: %s\n", strerror(err)); - } - else { - id = c[ctrls.error_idx].id; - printf("error %08x (%s): %s\n", id, - ctrlMap[id].name, strerror(err)); - } - } - delete [] c; - refresh(ctrl_class); -} - -long long ApplicationWindow::getVal64(unsigned id) -{ - const v4l2_queryctrl &qctrl = ctrlMap[id]; - QWidget *w = widgetMap[qctrl.id]; - long long v = 0; - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER64: - v = static_cast(w)->text().toLongLong(); - break; - default: - break; - } - setWhat(w, id, v); - return v; -} - -int ApplicationWindow::getVal(unsigned id) -{ - const v4l2_queryctrl &qctrl = ctrlMap[id]; - QWidget *w = widgetMap[qctrl.id]; - v4l2_querymenu qmenu; - int i, idx; - int v = 0; - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER: - if (qctrl.flags & V4L2_CTRL_FLAG_SLIDER) { - v = static_cast(w)->value(); - break; - } - - if (qctrl.maximum - qctrl.minimum <= 255) { - v = static_cast(w)->value(); - break; - } - v = static_cast(w)->text().toInt(); - break; - - case V4L2_CTRL_TYPE_BOOLEAN: - v = static_cast(w)->isChecked(); - break; - - case V4L2_CTRL_TYPE_MENU: - idx = static_cast(w)->currentItem(); - for (i = qctrl.minimum; i <= qctrl.maximum; i++) { - qmenu.id = qctrl.id; - qmenu.index = i; - if (::ioctl(fd, VIDIOC_QUERYMENU, &qmenu)) - continue; - if (idx-- == 0) - break; - } - v = i; - break; - - default: - break; - } - setWhat(w, id, v); - return v; -} - -void ApplicationWindow::updateCtrl(unsigned id) -{ - unsigned ctrl_class = V4L2_CTRL_ID2CLASS(id); - if (ctrl_class == V4L2_CID_PRIVATE_BASE) - ctrl_class = V4L2_CTRL_CLASS_USER; - - if (ctrlMap[id].flags & (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE)) - return; - - if (ctrl_class == V4L2_CTRL_CLASS_USER) { - struct v4l2_control c; - - c.id = id; - c.value = getVal(id); - if (::ioctl(fd, VIDIOC_S_CTRL, &c)) { - int err = errno; - char buf[200]; - - sprintf(buf, "Error %08x (%s): %s", id, - ctrlMap[id].name, strerror(err)); - statusBar()->message(buf, 10000); - } - return; - } - struct v4l2_ext_control c; - struct v4l2_ext_controls ctrls; - - memset(&c, 0, sizeof(c)); - memset(&ctrls, 0, sizeof(ctrls)); - c.id = id; - if (ctrlMap[id].type == V4L2_CTRL_TYPE_INTEGER64) - c.value64 = getVal64(id); - else - c.value = getVal(id); - ctrls.count = 1; - ctrls.ctrl_class = ctrl_class; - ctrls.controls = &c; - if (::ioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls)) { - int err = errno; - char buf[200]; - - sprintf(buf, "Error %08x (%s): %s", id, - ctrlMap[id].name, strerror(err)); - statusBar()->message(buf, 10000); - } - else if (ctrlMap[id].flags & V4L2_CTRL_FLAG_UPDATE) - refresh(ctrl_class); - else { - if (ctrlMap[id].type == V4L2_CTRL_TYPE_INTEGER64) - setVal64(id, c.value64); - else - setVal(id, c.value); - } -} - -void ApplicationWindow::refresh(unsigned ctrl_class) -{ - if (ctrl_class == V4L2_CTRL_CLASS_USER) { - for (unsigned i = 0; i < classMap[ctrl_class].size(); i++) { - unsigned id = classMap[ctrl_class][i]; - - v4l2_control c; - - c.id = id; - if (::ioctl(fd, VIDIOC_G_CTRL, &c)) { - int err = errno; - char buf[200]; - - sprintf(buf, "Error %08x (%s): %s", id, - ctrlMap[id].name, strerror(err)); - statusBar()->message(buf, 10000); - } - setVal(id, c.value); - } - return; - } - unsigned count = classMap[ctrl_class].size(); - struct v4l2_ext_control *c = new v4l2_ext_control[count]; - struct v4l2_ext_controls ctrls; - - for (unsigned i = 0; i < count; i++) { - c[i].id = classMap[ctrl_class][i]; - } - memset(&ctrls, 0, sizeof(ctrls)); - ctrls.count = count; - ctrls.ctrl_class = ctrl_class; - ctrls.controls = c; - if (::ioctl(fd, VIDIOC_G_EXT_CTRLS, &ctrls)) { - int err = errno; - - if (ctrls.error_idx >= ctrls.count) { - statusBar()->message(strerror(err), 10000); - } - else { - unsigned id = c[ctrls.error_idx].id; - char buf[200]; - - sprintf(buf, "Error %08x (%s): %s", id, - ctrlMap[id].name, strerror(err)); - statusBar()->message(buf, 10000); - } - } - else { - for (unsigned i = 0; i < ctrls.count; i++) { - unsigned id = c[i].id; - if (ctrlMap[id].type == V4L2_CTRL_TYPE_INTEGER64) - setVal64(id, c[i].value64); - else - setVal(id, c[i].value); - ::ioctl(fd, VIDIOC_QUERYCTRL, &ctrlMap[id]); - widgetMap[id]->setDisabled(ctrlMap[id].flags & - (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE)); - } - } - delete [] c; -} - -void ApplicationWindow::setWhat(QWidget *w, unsigned id, long long v) -{ - const v4l2_queryctrl &qctrl = ctrlMap[id]; - QString what; - QString flags = getCtrlFlags(qctrl.flags); - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER: - QWhatsThis::add(w, what.sprintf("Integer type control\n" - "Minimum: %d\n" - "Maximum: %d\n" - "Current: %d\n" - "Default: %d\n", - qctrl.minimum, qctrl.maximum, (int)v, qctrl.default_value) + flags); - break; - - case V4L2_CTRL_TYPE_INTEGER64: - QWhatsThis::add(w, what.sprintf("64-bit Integer type control\n" - "Current: %lld\n", v) + flags); - break; - - case V4L2_CTRL_TYPE_BUTTON: - QWhatsThis::add(w, what.sprintf("Button type control\n") + flags); - break; - - case V4L2_CTRL_TYPE_BOOLEAN: - QWhatsThis::add(w, what.sprintf("Boolean type control\n" - "Current: %d\n" - "Default: %d\n", - (int)v, qctrl.default_value) + flags); - break; - - case V4L2_CTRL_TYPE_MENU: - QWhatsThis::add(w, what.sprintf("Menu type control\n" - "Minimum: %d\n" - "Maximum: %d\n" - "Current: %d\n" - "Default: %d\n", - qctrl.minimum, qctrl.maximum, (int)v, qctrl.default_value) + flags); - break; - default: - break; - } -} - -void ApplicationWindow::setVal(unsigned id, int v) -{ - const v4l2_queryctrl &qctrl = ctrlMap[id]; - v4l2_querymenu qmenu; - QWidget *w = widgetMap[qctrl.id]; - int i, idx; - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER: - if (qctrl.flags & V4L2_CTRL_FLAG_SLIDER) - static_cast(w)->setValue(v); - else if (qctrl.maximum - qctrl.minimum <= 255) - static_cast(w)->setValue(v); - else - static_cast(w)->setText(QString::number(v)); - break; - - case V4L2_CTRL_TYPE_BOOLEAN: - static_cast(w)->setChecked(v); - break; - - case V4L2_CTRL_TYPE_MENU: - idx = 0; - for (i = qctrl.minimum; i <= v; i++) { - qmenu.id = id; - qmenu.index = i; - if (::ioctl(fd, VIDIOC_QUERYMENU, &qmenu)) - continue; - idx++; - } - static_cast(w)->setCurrentItem(idx - 1); - break; - default: - break; - } - setWhat(w, id, v); -} - -void ApplicationWindow::setVal64(unsigned id, long long v) -{ - const v4l2_queryctrl &qctrl = ctrlMap[id]; - QWidget *w = widgetMap[qctrl.id]; - - switch (qctrl.type) { - case V4L2_CTRL_TYPE_INTEGER64: - static_cast(w)->setText(QString::number(v)); - break; - default: - break; - } - setWhat(w, id, v); -} - -void ApplicationWindow::setDefaults(unsigned ctrl_class) -{ - for (unsigned i = 0; i < classMap[ctrl_class].size(); i++) { - unsigned id = classMap[ctrl_class][i]; - - if (ctrlMap[id].type != V4L2_CTRL_TYPE_INTEGER64 && - ctrlMap[id].type != V4L2_CTRL_TYPE_BUTTON) - setVal(id, ctrlMap[id].default_value); - } - ctrlAction(ctrl_class | CTRL_UPDATE); -} - -QString ApplicationWindow::getCtrlFlags(unsigned flags) -{ - QString s; - - if (flags & V4L2_CTRL_FLAG_GRABBED) - s += "grabbed "; - if (flags & V4L2_CTRL_FLAG_READ_ONLY) - s += "readonly "; - if (flags & V4L2_CTRL_FLAG_UPDATE) - s += "update "; - if (flags & V4L2_CTRL_FLAG_INACTIVE) - s += "inactive "; - if (flags & V4L2_CTRL_FLAG_SLIDER) - s += "slider "; - if (s.length()) s = QString("Flags: ") + s; - return s; -} - diff --git a/contrib/qv4l2-qt3/fileopen.xpm b/contrib/qv4l2-qt3/fileopen.xpm deleted file mode 100644 index 880417e..0000000 --- a/contrib/qv4l2-qt3/fileopen.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static const char *fileopen[] = { -" 16 13 5 1", -". c #040404", -"# c #808304", -"a c None", -"b c #f3f704", -"c c #f3f7f3", -"aaaaaaaaa...aaaa", -"aaaaaaaa.aaa.a.a", -"aaaaaaaaaaaaa..a", -"a...aaaaaaaa...a", -".bcb.......aaaaa", -".cbcbcbcbc.aaaaa", -".bcbcbcbcb.aaaaa", -".cbcb...........", -".bcb.#########.a", -".cb.#########.aa", -".b.#########.aaa", -"..#########.aaaa", -"...........aaaaa" -}; diff --git a/contrib/qv4l2-qt3/general-tab.cpp b/contrib/qv4l2-qt3/general-tab.cpp deleted file mode 100644 index 78656cf..0000000 --- a/contrib/qv4l2-qt3/general-tab.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* qv4l2: a control panel controlling v4l2 devices. - * - * Copyright (C) 2006 Hans Verkuil - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - - -#include "qv4l2.h" -#include "general-tab.h" -#include "libv4l2util.h" - -#include -#include -#include -#include - -#include -#include -#include - -GeneralTab::GeneralTab(const char *device, int _fd, int n, QWidget *parent) : - QGrid(n, parent), - fd(_fd) -{ - int cnt = 0; - - setSpacing(3); - - memset(&querycap, 0, sizeof(querycap)); - if (ioctl(fd, VIDIOC_QUERYCAP, &querycap) >=0) { - QLabel *l1 = new QLabel("Device:", this); - new QLabel(device, this); - l1->setAlignment(Qt::AlignRight); - - QLabel *l2 = new QLabel("Driver:", this); - l2->setAlignment(Qt::AlignRight); - - new QLabel((char *)querycap.driver, this); - - QLabel *l3 = new QLabel("Card:", this); - l3->setAlignment(Qt::AlignRight); - - new QLabel((char *)querycap.card, this); - - QLabel *l4 = new QLabel("Bus:", this); - l4->setAlignment(Qt::AlignRight); - - new QLabel((char *)querycap.bus_info, this); - } - - memset(&tuner, 0, sizeof(tuner)); - ioctl(fd, VIDIOC_G_TUNER, &tuner); - if (tuner.rangehigh>INT_MAX) - tuner.rangehigh=INT_MAX; - - struct v4l2_input vin; - memset(&vin, 0, sizeof(vin)); - if (ioctl(fd, VIDIOC_ENUMINPUT, &vin) >= 0) { - QLabel *label = new QLabel("Input", this); - label->setAlignment(Qt::AlignRight); - videoInput = new QComboBox(this); - while (ioctl(fd, VIDIOC_ENUMINPUT, &vin) >= 0) { - videoInput->insertItem((char *)vin.name); - vin.index++; - } - connect(videoInput, SIGNAL(activated(int)), SLOT(inputChanged(int))); - updateVideoInput(); - cnt++; - } - - struct v4l2_output vout; - memset(&vout, 0, sizeof(vout)); - if (ioctl(fd, VIDIOC_ENUMOUTPUT, &vout) >= 0) { - QLabel *label = new QLabel("Output", this); - label->setAlignment(Qt::AlignRight); - videoOutput = new QComboBox(this); - while (ioctl(fd, VIDIOC_ENUMOUTPUT, &vout) >= 0) { - videoOutput->insertItem((char *)vout.name); - vout.index++; - } - connect(videoOutput, SIGNAL(activated(int)), SLOT(outputChanged(int))); - updateVideoOutput(); - cnt++; - } - - struct v4l2_audio vaudio; - memset(&vaudio, 0, sizeof(vaudio)); - if (ioctl(fd, VIDIOC_ENUMAUDIO, &vaudio) >= 0) { - QLabel *label = new QLabel("Input Audio", this); - label->setAlignment(Qt::AlignRight); - audioInput = new QComboBox(this); - vaudio.index = 0; - while (ioctl(fd, VIDIOC_ENUMAUDIO, &vaudio) >= 0) { - audioInput->insertItem((char *)vaudio.name); - vaudio.index++; - } - connect(audioInput, SIGNAL(activated(int)), SLOT(inputAudioChanged(int))); - updateAudioInput(); - cnt++; - } - - struct v4l2_audioout vaudioout; - memset(&vaudioout, 0, sizeof(vaudioout)); - if (ioctl(fd, VIDIOC_ENUMAUDOUT, &vaudioout) >= 0) { - QLabel *label = new QLabel("Output Audio", this); - label->setAlignment(Qt::AlignRight); - audioOutput = new QComboBox(this); - while (ioctl(fd, VIDIOC_ENUMAUDOUT, &vaudioout) >= 0) { - audioOutput->insertItem((char *)vaudioout.name); - vaudioout.index++; - } - connect(audioOutput, SIGNAL(activated(int)), SLOT(outputAudioChanged(int))); - updateAudioOutput(); - cnt++; - } - - struct v4l2_standard vs; - memset(&vs, 0, sizeof(vs)); - if (ioctl(fd, VIDIOC_ENUMSTD, &vs) >= 0) { - QLabel *label = new QLabel("TV Standard", this); - label->setAlignment(Qt::AlignRight); - tvStandard = new QComboBox(this); - while (ioctl(fd, VIDIOC_ENUMSTD, &vs) >= 0) { - tvStandard->insertItem((char *)vs.name); - vs.index++; - } - connect(tvStandard, SIGNAL(activated(int)), SLOT(standardChanged(int))); - updateStandard(); - cnt++; - } - - bool first = cnt & 1; - - if (first) { - QString what; - QLabel *label = new QLabel("Frequency", this); - label->setAlignment(Qt::AlignRight); - freq = new QSpinBox(tuner.rangelow, tuner.rangehigh, 1, this); - QWhatsThis::add(freq, what.sprintf("Frequency\n" - "Low: %d\n" - "High: %d\n", - tuner.rangelow, tuner.rangehigh)); - connect(freq, SIGNAL(valueChanged(int)), SLOT(freqChanged(int))); - updateFreq(); - cnt++; - } - - { - QLabel *label = new QLabel("Frequency Tables", this); - label->setAlignment(Qt::AlignRight); - freqTable = new QComboBox(this); - for (int i = 0; v4l2_channel_lists[i].name; i++) { - freqTable->insertItem(v4l2_channel_lists[i].name); - } - connect(freqTable, SIGNAL(activated(int)), SLOT(freqTableChanged(int))); - - label = new QLabel("Channels", this); - label->setAlignment(Qt::AlignRight); - freqChannel = new QComboBox(this); - connect(freqChannel, SIGNAL(activated(int)), SLOT(freqChannelChanged(int))); - updateFreqChannel(); - } - - if (!first) { - QString what; - QLabel *label = new QLabel("Frequency", this); - label->setAlignment(Qt::AlignRight); - freq = new QSpinBox(tuner.rangelow, tuner.rangehigh, 1, this); - QWhatsThis::add(freq, what.sprintf("Frequency\n" - "Low: %d\n" - "High: %d\n", - tuner.rangelow, tuner.rangehigh)); - connect(freq, SIGNAL(valueChanged(int)), SLOT(freqChanged(int))); - updateFreq(); - cnt++; - } - - if (cnt & 1) { - new QWidget(this); - new QWidget(this); - } - QWidget *stretch = new QWidget(this); - stretch->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored); -} - -void GeneralTab::inputChanged(int input) -{ - g_mw->doIoctl("Set Input", VIDIOC_S_INPUT, &input); - struct v4l2_audio vaudio; - memset(&vaudio, 0, sizeof(vaudio)); - if (audioInput && ioctl(fd, VIDIOC_G_AUDIO, &vaudio) >= 0) { - audioInput->setCurrentItem(vaudio.index); - updateAudioInput(); - } - updateVideoInput(); -} - -void GeneralTab::outputChanged(int output) -{ - g_mw->doIoctl("Set Output", VIDIOC_S_OUTPUT, &output); - updateVideoOutput(); -} - -void GeneralTab::inputAudioChanged(int input) -{ - struct v4l2_audio vaudio; - memset(&vaudio, 0, sizeof(vaudio)); - vaudio.index = input; - g_mw->doIoctl("Set Audio Input", VIDIOC_S_AUDIO, &vaudio); - updateAudioInput(); -} - -void GeneralTab::outputAudioChanged(int output) -{ - struct v4l2_audioout vaudioout; - memset(&vaudioout, 0, sizeof(vaudioout)); - vaudioout.index = output; - g_mw->doIoctl("Set Audio Output", VIDIOC_S_AUDOUT, &vaudioout); - updateAudioOutput(); -} - -void GeneralTab::standardChanged(int std) -{ - struct v4l2_standard vs; - memset(&vs, 0, sizeof(vs)); - vs.index = std; - ioctl(fd, VIDIOC_ENUMSTD, &vs); - g_mw->doIoctl("Set TV Standard", VIDIOC_S_STD, &vs.id); - updateStandard(); -} - -void GeneralTab::freqTableChanged(int) -{ - updateFreqChannel(); - freqChannelChanged(0); -} - -void GeneralTab::freqChannelChanged(int idx) -{ - freq->setValue((int)(v4l2_channel_lists[freqTable->currentItem()].list[idx].freq / 62.5)); -} - -void GeneralTab::freqChanged(int val) -{ - struct v4l2_frequency f; - - memset(&f, 0, sizeof(f)); - f.type = V4L2_TUNER_ANALOG_TV; - f.frequency = val; - g_mw->doIoctl("Set frequency", VIDIOC_S_FREQUENCY, &f); -} - -void GeneralTab::updateVideoInput() -{ - int input; - - ioctl(fd, VIDIOC_G_INPUT, &input); - videoInput->setCurrentItem(input); -} - -void GeneralTab::updateVideoOutput() -{ - int output; - - ioctl(fd, VIDIOC_G_OUTPUT, &output); - videoOutput->setCurrentItem(output); -} - -void GeneralTab::updateAudioInput() -{ - struct v4l2_audio audio; - QString what; - - memset(&audio, 0, sizeof(audio)); - ioctl(fd, VIDIOC_G_AUDIO, &audio); - audioInput->setCurrentItem(audio.index); - if (audio.capability & V4L2_AUDCAP_STEREO) - what = "stereo input"; - else - what = "mono input"; - if (audio.capability & V4L2_AUDCAP_AVL) - what += ", has AVL"; - if (audio.mode & V4L2_AUDMODE_AVL) - what += ", AVL is on"; - QWhatsThis::add(audioInput, what); -} - -void GeneralTab::updateAudioOutput() -{ - struct v4l2_audioout audio; - - memset(&audio, 0, sizeof(audio)); - ioctl(fd, VIDIOC_G_AUDOUT, &audio); - audioOutput->setCurrentItem(audio.index); -} - -void GeneralTab::updateStandard() -{ - v4l2_std_id std; - struct v4l2_standard vs; - QString what; - ioctl(fd, VIDIOC_G_STD, &std); - memset(&vs, 0, sizeof(vs)); - while (ioctl(fd, VIDIOC_ENUMSTD, &vs) != -1) { - if (vs.id & std) { - tvStandard->setCurrentItem(vs.index); - what.sprintf("TV Standard (0x%llX)\n" - "Frame period: %f (%d/%d)\n" - "Frame lines: %d\n", (long long int)std, - (double)vs.frameperiod.numerator / vs.frameperiod.denominator, - vs.frameperiod.numerator, vs.frameperiod.denominator, - vs.framelines); - QWhatsThis::add(tvStandard, what); - return; - } - vs.index++; - } -} - -void GeneralTab::updateFreq() -{ - struct v4l2_frequency f; - - memset(&f, 0, sizeof(f)); - ioctl(fd, VIDIOC_G_FREQUENCY, &f); - freq->setValue(f.frequency); -} - -void GeneralTab::updateFreqChannel() -{ - freqChannel->clear(); - int tbl = freqTable->currentItem(); - const struct v4l2_channel_list *list = v4l2_channel_lists[tbl].list; - for (unsigned i = 0; i < v4l2_channel_lists[tbl].count; i++) - freqChannel->insertItem(list[i].name); -} - diff --git a/contrib/qv4l2-qt3/general-tab.h b/contrib/qv4l2-qt3/general-tab.h deleted file mode 100644 index 8130e11..0000000 --- a/contrib/qv4l2-qt3/general-tab.h +++ /dev/null @@ -1,73 +0,0 @@ -/* qv4l2: a control panel controlling v4l2 devices. - * - * Copyright (C) 2006 Hans Verkuil - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - - -#ifndef GENERAL_TAB_H -#define GENERAL_TAB_H - -#include -#include -#include - -class QComboBox; -class QSpinBox; - -class GeneralTab: public QGrid -{ - Q_OBJECT - -public: - GeneralTab(const char *device, int fd, int n, QWidget *parent = 0); - virtual ~GeneralTab() {} - -private slots: - void inputChanged(int); - void outputChanged(int); - void inputAudioChanged(int); - void outputAudioChanged(int); - void standardChanged(int); - void freqTableChanged(int); - void freqChannelChanged(int); - void freqChanged(int); - -private: - void updateVideoInput(); - void updateVideoOutput(); - void updateAudioInput(); - void updateAudioOutput(); - void updateStandard(); - void updateFreq(); - void updateFreqChannel(); - - int fd; - struct v4l2_tuner tuner; - struct v4l2_capability querycap; - - // General tab - QComboBox *videoInput; - QComboBox *videoOutput; - QComboBox *audioInput; - QComboBox *audioOutput; - QComboBox *tvStandard; - QSpinBox *freq; - QComboBox *freqTable; - QComboBox *freqChannel; -}; - -#endif diff --git a/contrib/qv4l2-qt3/qv4l2-qt3.pro b/contrib/qv4l2-qt3/qv4l2-qt3.pro deleted file mode 100644 index bd639e1..0000000 --- a/contrib/qv4l2-qt3/qv4l2-qt3.pro +++ /dev/null @@ -1,12 +0,0 @@ -###################################################################### -# Automatically generated by qmake (1.07a) Sat Jun 17 12:35:16 2006 -###################################################################### - -TEMPLATE = app -INCLUDEPATH += . ../../utils/libv4l2util ../../include -CONFIG += debug thread - -# Input -HEADERS += qv4l2.h general-tab.h -SOURCES += qv4l2.cpp general-tab.cpp ctrl-tab.cpp -LIBS += -lv4l2util -L../../utils/libv4l2util diff --git a/contrib/qv4l2-qt3/qv4l2.cpp b/contrib/qv4l2-qt3/qv4l2.cpp deleted file mode 100644 index 764fbd1..0000000 --- a/contrib/qv4l2-qt3/qv4l2.cpp +++ /dev/null @@ -1,220 +0,0 @@ - -#include "qv4l2.h" -#include "general-tab.h" -#include "libv4l2util.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "fileopen.xpm" - -ApplicationWindow::ApplicationWindow() - : QMainWindow( 0, "V4L2 main window", WDestructiveClose | WGroupLeader ) -{ - QPixmap openIcon, saveIcon; - - fd = -1; - - videoDevice = NULL; - sigMapper = NULL; - QToolBar * fileTools = new QToolBar( this, "file operations" ); - fileTools->setLabel( "File Operations" ); - - openIcon = QPixmap( fileopen ); - QToolButton * fileOpen - = new QToolButton( openIcon, "Open File", QString::null, - this, SLOT(choose()), fileTools, "open file" ); - - (void)QWhatsThis::whatsThisButton( fileTools ); - - const char * fileOpenText = "

" - "Click this button to open a new v4l device.
" - "You can also select the Open command " - "from the File menu.

"; - - QWhatsThis::add( fileOpen, fileOpenText ); - - QMimeSourceFactory::defaultFactory()->setPixmap( "fileopen", openIcon ); - - QPopupMenu * file = new QPopupMenu( this ); - menuBar()->insertItem( "&File", file ); - - - int id; - id = file->insertItem( openIcon, "&Open...", - this, SLOT(choose()), CTRL+Key_O ); - file->setWhatsThis( id, fileOpenText ); - - file->insertSeparator(); - - file->insertItem( "&Close", this, SLOT(close()), CTRL+Key_W ); - - file->insertItem( "&Quit", qApp, SLOT( closeAllWindows() ), CTRL+Key_Q ); - - menuBar()->insertSeparator(); - - QPopupMenu * help = new QPopupMenu( this ); - menuBar()->insertItem( "&Help", help ); - - help->insertItem( "&About", this, SLOT(about()), Key_F1 ); - help->insertItem( "What's &This", this, SLOT(whatsThis()), SHIFT+Key_F1 ); - - statusBar()->message( "Ready", 2000 ); - - tabs = new QTabWidget(this); - tabs->setMargin(3); - - //resize( 450, 600 ); -} - - -ApplicationWindow::~ApplicationWindow() -{ - if (fd >= 0) ::close(fd); -} - - -void ApplicationWindow::setDevice(const QString &device) -{ - if (fd >= 0) ::close(fd); - while (QWidget *page = tabs->page(0)) { - tabs->removePage(page); - delete page; - } - delete tabs; - delete sigMapper; - tabs = new QTabWidget(this); - tabs->setMargin(3); - sigMapper = new QSignalMapper(this); - connect(sigMapper, SIGNAL(mapped(int)), this, SLOT(ctrlAction(int))); - ctrlMap.clear(); - widgetMap.clear(); - classMap.clear(); - - fd = ::open(device, O_RDONLY); - if (fd >= 0) { - tabs->addTab(new GeneralTab(device, fd, 4, tabs), "General"); - addTabs(); - } - if (QWidget *current = tabs->currentPage()) { - current->show(); - } - tabs->show(); - tabs->setFocus(); - setCentralWidget(tabs); -} - -void ApplicationWindow::selectdev(int index) -{ - setDevice(videoDevice->text(index)); -} - -void ApplicationWindow::add_dirVideoDevice(const char *dirname) -{ - 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 ) -{ - ce->accept(); -} - -bool ApplicationWindow::doIoctl(QString descr, unsigned cmd, void *arg) -{ - statusBar()->clear(); - int err = ioctl(fd, cmd, arg); - - if (err == -1) { - QString s = strerror(errno); - statusBar()->message(descr + ": " + s, 10000); - } - return err != -1; -} - -void ApplicationWindow::about() -{ - QMessageBox::about( this, "V4L2 Control Panel", - "This program allows easy experimenting with video4linux devices."); -} - -ApplicationWindow *g_mw; - -int main(int argc, char **argv) -{ - QApplication a(argc, argv); - g_mw = new ApplicationWindow(); - g_mw->setCaption( "V4L2 Control Panel" ); - g_mw->setDevice("/dev/video0"); - g_mw->show(); - a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); - return a.exec(); -} diff --git a/contrib/qv4l2-qt3/qv4l2.h b/contrib/qv4l2-qt3/qv4l2.h deleted file mode 100644 index 5421a86..0000000 --- a/contrib/qv4l2-qt3/qv4l2.h +++ /dev/null @@ -1,102 +0,0 @@ -/* qv4l2: a control panel controlling v4l2 devices. - * - * Copyright (C) 2006 Hans Verkuil - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef QV4L2_H -#define QV4L2_H - -#include -#include -#include -#include -#include -#include - -#include - -class QComboBox; -class QSpinBox; - -typedef std::vector ClassIDVec; -typedef std::map ClassMap; -typedef std::map CtrlMap; -typedef std::map WidgetMap; - -enum { - CTRL_UPDATE_ON_CHANGE = 0x10, - CTRL_DEFAULTS, - CTRL_REFRESH, - CTRL_UPDATE -}; - -class ApplicationWindow: public QMainWindow -{ - Q_OBJECT - -public: - ApplicationWindow(); - ~ApplicationWindow(); - - void setDevice(const QString &device); - bool doIoctl(QString descr, unsigned cmd, void *arg); - -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); - void updateCtrl(unsigned id); - void refresh(unsigned ctrl_class); - void setDefaults(unsigned ctrl_class); - int getVal(unsigned id); - long long getVal64(unsigned id); - void setVal(unsigned id, int v); - void setVal64(unsigned id, long long v); - QString getCtrlFlags(unsigned flags); - void setWhat(QWidget *w, unsigned id, long long v); - void updateVideoInput(); - void updateVideoOutput(); - void updateAudioInput(); - void updateAudioOutput(); - void updateStandard(); - void updateFreq(); - void updateFreqChannel(); - - QString filename; - QSignalMapper *sigMapper; - QTabWidget *tabs; - QPopupMenu *videoDevice; - int fd; - CtrlMap ctrlMap; - WidgetMap widgetMap; - ClassMap classMap; -}; - -extern ApplicationWindow *g_mw; - -#endif