[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