Inhibit display dimming while video recording
authorMohammed Sameer <msameer@foolab.org>
Tue, 11 Sep 2012 20:46:45 +0000 (23:46 +0300)
committerMohammed Sameer <msameer@foolab.org>
Tue, 11 Sep 2012 20:46:45 +0000 (23:46 +0300)
qml/VideoPage.qml
qml/main.qml
src/displaystate.cpp [new file with mode: 0644]
src/displaystate.h [new file with mode: 0644]
src/main.cpp
src/src.pro

index 59bb14a..f6dddfc 100644 (file)
@@ -2,6 +2,7 @@
 import QtQuick 1.1
 import com.nokia.meego 1.1
 import QtCamera 1.0
+import CameraPlus 1.0
 
 CameraPage {
         id: page
@@ -10,6 +11,10 @@ CameraPage {
 
         orientationLock: PageOrientation.LockLandscape
 
+        DisplayState {
+                inhibitDim: videoMode.recording
+        }
+
         Button {
                 id: recording
                 anchors.right: parent.right
index 16b945a..58e15f5 100644 (file)
@@ -19,7 +19,6 @@ import CameraPlus 1.0
 // TODO: mass storage
 // TODO: resource policy
 // TODO: prevent going to mass storage while recording and capturing
-// TODO: prevent screen dimming while recording
 // TODO: sounds
 // TODO: grid lines, face tracking
 // TODO: complete settings pages
diff --git a/src/displaystate.cpp b/src/displaystate.cpp
new file mode 100644 (file)
index 0000000..a2c05c2
--- /dev/null
@@ -0,0 +1,51 @@
+#include "displaystate.h"
+#include <qmsystem2/qmdisplaystate.h>
+#include <QTimer>
+#include <QDebug>
+
+DisplayState::DisplayState(QObject *parent) :
+  QObject(parent), m_state(new MeeGo::QmDisplayState(this)), m_timer(new QTimer(this)) {
+
+  m_timer->setSingleShot(false);
+  m_timer->setInterval(50 * 1000);
+
+  QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(timeout()));
+}
+
+DisplayState::~DisplayState() {
+  setInhibitDim(false);
+}
+
+bool DisplayState::isDimInhibited() const {
+  return m_timer->isActive();
+}
+
+void DisplayState::setInhibitDim(bool inhibit) {
+  if (m_timer->isActive() == inhibit) {
+    return;
+  }
+
+  if (!inhibit) {
+    if (!m_state->cancelBlankingPause()) {
+      qWarning() << "Failed to cancel display dimming!";
+    }
+
+    m_timer->stop();
+  }
+  else {
+    if (!m_state->setBlankingPause()) {
+      qWarning() << "Failed to inhibit display dimming!";
+      return;
+    }
+
+    m_timer->start();
+  }
+
+  emit inhibitDimChanged();
+}
+
+void DisplayState::timeout() {
+  if (!m_state->setBlankingPause()) {
+    qWarning() << "Failed to inhibit display dimming!";
+  }
+}
diff --git a/src/displaystate.h b/src/displaystate.h
new file mode 100644 (file)
index 0000000..ab6adbb
--- /dev/null
@@ -0,0 +1,35 @@
+// -*- c++ -*-
+
+#ifndef DISPLAY_STATE_H
+#define DISPLAY_STATE_H
+
+#include <QObject>
+
+class QTimer;
+namespace MeeGo {
+  class QmDisplayState;
+};
+
+class DisplayState : public QObject {
+  Q_OBJECT
+  Q_PROPERTY(bool inhibitDim READ isDimInhibited WRITE setInhibitDim NOTIFY inhibitDimChanged);
+
+public:
+  DisplayState(QObject *parent = 0);
+  ~DisplayState();
+
+  bool isDimInhibited() const;
+  void setInhibitDim(bool inhibit);
+
+signals:
+  void inhibitDimChanged();
+
+private slots:
+  void timeout();
+
+private:
+  MeeGo::QmDisplayState *m_state;
+  QTimer *m_timer;
+};
+
+#endif /* DISPLAY_STATE_H */
index 62d6ba6..bbfb23f 100644 (file)
@@ -10,6 +10,7 @@
 #include "settings.h"
 #include "filenaming.h"
 #include "quillitem.h"
+#include "displaystate.h"
 
 Q_DECL_EXPORT int main(int argc, char *argv[]) {
   QApplication::setAttribute(Qt::AA_X11InitThreads, true);
@@ -24,6 +25,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) {
   qmlRegisterType<Settings>("CameraPlus", 1, 0, "Settings");
   qmlRegisterType<FileNaming>("CameraPlus", 1, 0, "FileNaming");
   qmlRegisterType<QuillItem>("CameraPlus", 1, 0, "QuillItem");
+  qmlRegisterType<DisplayState>("CameraPlus", 1, 0, "DisplayState");
 
   QUrl sourceUrl = QUrl::fromLocalFile(QDir::currentPath() + "/main.qml");
   view.setSource(sourceUrl);
index 2f38feb..200bba5 100644 (file)
@@ -8,9 +8,9 @@ QT += declarative opengl
 CONFIG += link_pkgconfig debug static
 
 PKGCONFIG = gstreamer-0.10 gstreamer-interfaces-0.10 gstreamer-video-0.10 gstreamer-tag-0.10 \
-            gstreamer-pbutils-0.10 meego-gstreamer-interfaces-0.10 quill
+            gstreamer-pbutils-0.10 meego-gstreamer-interfaces-0.10 quill qmsystem2
 
 LIBS +=  -L../imports/ -limports -L../lib/ -lqtcamera
 
-SOURCES += main.cpp settings.cpp filenaming.cpp quillitem.cpp
-HEADERS += settings.h filenaming.h quillitem.h
+SOURCES += main.cpp settings.cpp filenaming.cpp quillitem.cpp displaystate.cpp
+HEADERS += settings.h filenaming.h quillitem.h displaystate.h