[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bphonon=5D_demos/simplecapture=3A_simplecapture=3A_A?=
From:       Casian Andrei <skeletk13 () gmail ! com>
Date:       2011-02-28 21:50:21
Message-ID: 20110228215021.9890BA60D7 () git ! kde ! org
[Download RAW message or body]

Git commit 7517204fce92237c350657a35a29b660bc40b106 by Casian Andrei.
Committed on 28/02/2011 at 18:26.
Pushed by casianandrei into branch 'master'.

simplecapture: Add method of capturing using AvCapture

M  +1    -1    demos/simplecapture/CMakeLists.txt     
M  +128  -25   demos/simplecapture/capture.cpp     
M  +38   -3    demos/simplecapture/capture.h     

http://commits.kde.org/phonon/7517204fce92237c350657a35a29b660bc40b106

diff --git a/demos/simplecapture/CMakeLists.txt b/demos/simplecapture/CMakeLists.txt
index ff7c30b..4679ac1 100644
--- a/demos/simplecapture/CMakeLists.txt
+++ b/demos/simplecapture/CMakeLists.txt
@@ -18,4 +18,4 @@ qt4_automoc(${simplecapture_SRCS})
 
 add_executable(simplecapture ${simplecapture_SRCS} ${simplecapture_MOC_SRCS})
 
-target_link_libraries(simplecapture ${QT_LIBRARIES} ${PHONON_LIBRARY})
+target_link_libraries(simplecapture ${QT_LIBRARIES} ${PHONON_LIBRARY} \
                phononexperimental)
diff --git a/demos/simplecapture/capture.cpp b/demos/simplecapture/capture.cpp
index 75b0216..d4b84a3 100644
--- a/demos/simplecapture/capture.cpp
+++ b/demos/simplecapture/capture.cpp
@@ -24,8 +24,10 @@
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QPushButton>
+#include <QtGui/QRadioButton>
 #include <QtGui/QMessageBox>
 #include <phonon/MediaObject>
+#include <phonon/experimental/avcapture.h>  // TODO AvCapture
 #include <phonon/AudioOutput>
 #include <phonon/VideoWidget>
 #include <phonon/VolumeSlider>
@@ -36,20 +38,12 @@
 
 CaptureWidget::CaptureWidget(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f)
 {
-    Phonon::AudioOutput *audioOutput = new Phonon::AudioOutput(this);
-    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(this);
-    Phonon::VideoCaptureDeviceModel *videoDeviceModel = new \
                Phonon::VideoCaptureDeviceModel(this);
-    Phonon::AudioCaptureDeviceModel *audioDeviceModel = new \
                Phonon::AudioCaptureDeviceModel(this);
-
-    setLayout(new QVBoxLayout);
-
-    videoWidget->setMinimumSize(QSize(400, 300));
-    videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    layout()->addWidget(videoWidget);
-
     m_media = new Phonon::MediaObject(this);
-    Phonon::createPath(m_media, audioOutput);
-    Phonon::createPath(m_media, videoWidget);
+    m_avcapture = new Phonon::Experimental::AvCapture(this);
+    m_captureNode = m_media;
+
+    m_audioOutput = new Phonon::AudioOutput(this);
+    m_videoWidget = new Phonon::VideoWidget(this);
 
     m_playButton = new QPushButton(this);
     m_playButton->setText(tr("Play"));
@@ -58,32 +52,141 @@ CaptureWidget::CaptureWidget(QWidget* parent, Qt::WindowFlags \
f): QWidget(parent  m_stopButton = new QPushButton(this);
     m_stopButton->setText(tr("Stop"));
     m_stopButton->setEnabled(false);
-    connect(m_stopButton, SIGNAL(clicked()), m_media, SLOT(stop()));
+    connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop()));
+
+    m_moButton = new QRadioButton(this);
+    m_moButton->setText(tr("Use MediaObject"));
+    m_moButton->setAutoExclusive(true);
+    m_moButton->setChecked(true);
+    connect(m_moButton, SIGNAL(toggled(bool)), this, SLOT(enableMOCapture(bool)));
+
+    m_avcapButton = new QRadioButton(this);
+    m_avcapButton->setText(tr("Use Audio Video Capture (AvCapture)"));
+    m_avcapButton->setAutoExclusive(true);
+    connect(m_avcapButton, SIGNAL(toggled(bool)), this, \
SLOT(enableAvCapture(bool))); +
+    setLayout(new QVBoxLayout);
+
+    m_videoWidget->setMinimumSize(QSize(400, 300));
+    m_videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    layout()->addWidget(m_videoWidget);
 
     QHBoxLayout *buttonsLayout = new QHBoxLayout();
+    buttonsLayout->addWidget(m_moButton);
+    buttonsLayout->addWidget(m_avcapButton);
+    layout()->addItem(buttonsLayout);
+
+    buttonsLayout = new QHBoxLayout();
     buttonsLayout->addWidget(m_playButton);
     buttonsLayout->addWidget(m_stopButton);
     layout()->addItem(buttonsLayout);
 
-    QList<Phonon::VideoCaptureDevice> lv = \
                Phonon::BackendCapabilities::availableVideoCaptureDevices();
-    if (!lv.isEmpty()) {
-        Phonon::MediaSource source(lv.first());
-        m_media->setCurrentSource(source);
+    setupCaptureSource();
+    playPause();
+}
+
+void CaptureWidget::enableMOCapture(bool enable)
+{
+    if (!enable)
+        return;
+
+    stop();
+    m_captureNode = m_media;
+    setupCaptureSource();
+}
+
+void CaptureWidget::enableAvCapture(bool enable)
+{
+    if (!enable)
+        return;
+
+    stop();
+    m_captureNode = m_avcapture;
+    setupCaptureSource();
+}
+
+void CaptureWidget::setupCaptureSource()
+{
+    if (m_audioPath.isValid()) {
+        m_audioPath.disconnect();
+    }
+    if (m_videoPath.isValid()) {
+        m_videoPath.disconnect();
+    }
+
+    if (m_captureNode == m_media) {
+        m_audioPath = Phonon::createPath(m_media, m_audioOutput);
+        m_videoPath = Phonon::createPath(m_media, m_videoWidget);
+    }
+
+    if (m_captureNode == m_avcapture) {
+        m_audioPath = Phonon::createPath(m_avcapture, m_audioOutput);
+        m_videoPath = Phonon::createPath(m_avcapture, m_videoWidget);
+    }
+
+    if (!m_audioPath.isValid()) {
+        QMessageBox::critical(this, "Error", "Your backend may not support audio \
capturing."); +    }
+    if (!m_videoPath.isValid()) {
+        QMessageBox::critical(this, "Error", "Your backend may not support video \
capturing."); +    }
+
+    Phonon::GlobalConfig pgc;
+
+    const Phonon::AudioCaptureDevice acd = \
Phonon::AudioCaptureDevice::fromIndex(pgc.audioCaptureDeviceFor(Phonon::NoCategory)); \
+    if (acd.isValid()) { +        if (m_captureNode == m_media) {
+            // m_media->setCurrentSource(acd);
+        }
+
+        if (m_captureNode == m_avcapture) {
+            m_avcapture->setAudioCaptureDevice(acd);
+        }
     } else {
-        QMessageBox::critical(this, tr("Error"), tr("No video capture devices \
found.")); +        QMessageBox::warning(this, tr("Warning"), tr("No audio capture \
devices found."));  }
 
-    connect(m_media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), this, \
SLOT(mediaStateChanged(Phonon::State, Phonon::State))); +    \
Phonon::VideoCaptureDevice vcd = \
Phonon::VideoCaptureDevice::fromIndex(pgc.videoCaptureDeviceFor(Phonon::NoCategory)); \
+    if (vcd.isValid()) { +        if (m_captureNode == m_media) {
+            m_media->setCurrentSource(vcd);
+        }
 
-    m_media->play();
+        if (m_captureNode == m_avcapture) {
+            m_avcapture->setVideoCaptureDevice(vcd);
+        }
+    } else {
+        QMessageBox::warning(this, tr("Warning"), tr("No video capture devices \
found.")); +    }
+
+    connect(m_media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), this, \
SLOT(mediaStateChanged(Phonon::State, Phonon::State)));  }
 
 void CaptureWidget::playPause()
 {
-    if (m_media->state() == Phonon::PlayingState) {
-        m_media->pause();
-    } else {
-        m_media->play();
+    if (m_captureNode == m_media) {
+        if (m_media->state() == Phonon::PlayingState) {
+            m_media->stop();
+        } else {
+            m_media->play();
+        }
+    }
+
+    if (m_captureNode == m_avcapture) {
+        // TODO AvCapture state
+
+        m_avcapture->start();
+    }
+}
+
+void CaptureWidget::stop()
+{
+    if (m_captureNode == m_media) {
+        m_media->stop();
+    }
+
+    if (m_captureNode == m_avcapture) {
+        m_avcapture->stop();
     }
 }
 
diff --git a/demos/simplecapture/capture.h b/demos/simplecapture/capture.h
index f30b32c..7919914 100644
--- a/demos/simplecapture/capture.h
+++ b/demos/simplecapture/capture.h
@@ -24,10 +24,20 @@
 
 #include <QtGui/QWidget>
 #include <phonon/Global>
+#include <phonon/Path>
 
 class QPushButton;
+class QRadioButton;
+
 namespace Phonon {
+    class AudioOutput;
+    class MediaNode;
     class MediaObject;
+    class VideoWidget;
+
+    namespace Experimental {
+        class AvCapture;
+    }
 }
 
 /**
@@ -41,7 +51,6 @@ public:
     CaptureWidget(QWidget *parent = NULL, Qt::WindowFlags f = 0);
 
 private slots:
-
     /**
      * @brief Updates the GUI when the underlying MediaObject changes states
      */
@@ -52,10 +61,36 @@ private slots:
      */
     void playPause();
 
+    /**
+     * @brief Stops the capture
+     */
+    void stop();
+
+    /**
+     * @brief Switch to MediaObject capture method
+     */
+    void enableMOCapture(bool enable);
+
+    /**
+     * @brief Switch to AvCapture capture method
+     */
+    void enableAvCapture(bool enable);
+
+private:
+    void setupCaptureSource();
+
 private:
+    Phonon::AudioOutput *m_audioOutput;
+    Phonon::VideoWidget *m_videoWidget;
+    Phonon::MediaNode *m_captureNode;
     Phonon::MediaObject *m_media;
-    QPushButton* m_playButton;
-    QPushButton* m_stopButton;
+    Phonon::Experimental::AvCapture *m_avcapture;
+    Phonon::Path m_audioPath;
+    Phonon::Path m_videoPath;
+    QPushButton *m_playButton;
+    QPushButton *m_stopButton;
+    QRadioButton *m_moButton;
+    QRadioButton *m_avcapButton;
 };
 
 #endif // CAPTURE_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic