This is an automatic generated email to let you know that the following patch were queued at the http://git.linuxtv.org/v4l-utils.git tree:
Subject: qv4l2: add support to stream raw frames into a file. Author: Hans Verkuil <[email protected]> Date: Tue Jul 24 15:51:32 2012 +0200 Signed-off-by: Hans Verkuil <[email protected]> (cherry picked from commit 79228ec7b0eb7d11bba2f47eddbfeba3d0a5c81c) Signed-off-by: Gregor Jasny <[email protected]> utils/qv4l2/qv4l2.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++- utils/qv4l2/qv4l2.h | 5 ++++ utils/qv4l2/qv4l2.qrc | 1 + utils/qv4l2/saveraw.png | Bin 0 -> 1784 bytes 4 files changed, 56 insertions(+), 1 deletions(-) --- http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=2b6995b38bd83210287badc84935097da144e67a diff --git a/utils/qv4l2/qv4l2.cpp b/utils/qv4l2/qv4l2.cpp index f4be2af..5c2d8af 100644 --- a/utils/qv4l2/qv4l2.cpp +++ b/utils/qv4l2/qv4l2.cpp @@ -83,6 +83,12 @@ ApplicationWindow::ApplicationWindow() : m_snapshotAct->setDisabled(true); connect(m_snapshotAct, SIGNAL(triggered()), this, SLOT(snapshot())); + m_saveRawAct = new QAction(QIcon(":/saveraw.png"), "Save Raw Frames", this); + m_saveRawAct->setStatusTip("Save raw frames to file."); + m_saveRawAct->setCheckable(true); + m_saveRawAct->setChecked(false); + connect(m_saveRawAct, SIGNAL(toggled(bool)), this, SLOT(saveRaw(bool))); + m_showFramesAct = new QAction(QIcon(":/video-television.png"), "Show &Frames", this); m_showFramesAct->setStatusTip("Only show captured frames if set."); m_showFramesAct->setCheckable(true); @@ -104,6 +110,7 @@ ApplicationWindow::ApplicationWindow() : fileMenu->addAction(closeAct); fileMenu->addAction(m_capStartAct); fileMenu->addAction(m_snapshotAct); + fileMenu->addAction(m_saveRawAct); fileMenu->addAction(m_showFramesAct); fileMenu->addSeparator(); fileMenu->addAction(quitAct); @@ -113,6 +120,7 @@ ApplicationWindow::ApplicationWindow() : toolBar->addAction(openAct); toolBar->addAction(m_capStartAct); toolBar->addAction(m_snapshotAct); + toolBar->addAction(m_saveRawAct); toolBar->addAction(m_showFramesAct); toolBar->addSeparator(); toolBar->addAction(quitAct); @@ -313,6 +321,8 @@ void ApplicationWindow::capFrame() } if (m_makeSnapshot) makeSnapshot((unsigned char *)m_frameData, s); + if (m_saveRaw.openMode()) + m_saveRaw.write((const char *)m_frameData, s); if (!m_showFrames) break; @@ -346,6 +356,8 @@ void ApplicationWindow::capFrame() } if (m_makeSnapshot) makeSnapshot((unsigned char *)m_buffers[buf.index].start, buf.bytesused); + if (m_saveRaw.openMode()) + m_saveRaw.write((const char *)m_buffers[buf.index].start, buf.bytesused); qbuf(buf); break; @@ -371,6 +383,8 @@ void ApplicationWindow::capFrame() } if (m_makeSnapshot) makeSnapshot((unsigned char *)buf.m.userptr, buf.bytesused); + if (m_saveRaw.openMode()) + m_saveRaw.write((const char *)buf.m.userptr, buf.bytesused); qbuf(buf); break; @@ -753,7 +767,7 @@ void SaveDialog::selected(const QString &s) { if (!s.isEmpty()) { QFile file(s); - file.open(QIODevice::WriteOnly); + file.open(QIODevice::WriteOnly | QIODevice::Truncate); file.write((const char *)m_buf, m_size); file.close(); } @@ -782,6 +796,41 @@ void ApplicationWindow::snapshot() m_makeSnapshot = true; } +void ApplicationWindow::rejectedRawFile() +{ + m_saveRawAct->setChecked(false); +} + +void ApplicationWindow::openRawFile(const QString &s) +{ + if (s.isEmpty()) + return; + + if (m_saveRaw.openMode()) + m_saveRaw.close(); + m_saveRaw.setFileName(s); + m_saveRaw.open(QIODevice::WriteOnly | QIODevice::Truncate); + m_saveRawAct->setChecked(true); +} + +void ApplicationWindow::saveRaw(bool checked) +{ + if (!checked) { + if (m_saveRaw.openMode()) + m_saveRaw.close(); + return; + } + + SaveDialog *dlg = new SaveDialog(this, "Save Raw Frames"); + dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setFileMode(QFileDialog::AnyFile); + dlg->setAcceptMode(QFileDialog::AcceptSave); + dlg->setModal(false); + connect(dlg, SIGNAL(fileSelected(const QString &)), this, SLOT(openRawFile(const QString &))); + connect(dlg, SIGNAL(rejected()), this, SLOT(rejectedRawFile())); + dlg->show(); +} + void ApplicationWindow::about() { QMessageBox::about(this, "V4L2 Test Bench", diff --git a/utils/qv4l2/qv4l2.h b/utils/qv4l2/qv4l2.h index 7ab84ba..995d657 100644 --- a/utils/qv4l2/qv4l2.h +++ b/utils/qv4l2/qv4l2.h @@ -103,12 +103,15 @@ private slots: void capFrame(); void snapshot(); void capVbiFrame(); + void saveRaw(bool); // gui private slots: void opendev(); void openrawdev(); void ctrlAction(int); + void openRawFile(const QString &s); + void rejectedRawFile(); void about(); @@ -156,6 +159,7 @@ private: VbiTab *m_vbiTab; QAction *m_capStartAct; QAction *m_snapshotAct; + QAction *m_saveRawAct; QAction *m_showFramesAct; QString m_filename; QSignalMapper *m_sigMapper; @@ -176,6 +180,7 @@ private: unsigned m_lastFrame; unsigned m_fps; struct timeval m_tv; + QFile m_saveRaw; }; extern ApplicationWindow *g_mw; diff --git a/utils/qv4l2/qv4l2.qrc b/utils/qv4l2/qv4l2.qrc index 2540ba5..759b445 100644 --- a/utils/qv4l2/qv4l2.qrc +++ b/utils/qv4l2/qv4l2.qrc @@ -5,6 +5,7 @@ <file>fileclose.png</file> <file>record.png</file> <file>snapshot.png</file> + <file>saveraw.png</file> <file>video-television.png</file> <file>qv4l2.png</file> </qresource> diff --git a/utils/qv4l2/saveraw.png b/utils/qv4l2/saveraw.png new file mode 100644 index 0000000..575bd87 Binary files /dev/null and b/utils/qv4l2/saveraw.png differ _______________________________________________ linuxtv-commits mailing list [email protected] http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits
