#include "qtcamviewfinderrenderer.h"
#include <QPainter>
#include <QMatrix4x4>
+#include <cmath>
#if defined(QT4)
VideoPlayer::VideoPlayer(QDeclarativeItem *parent) :
}
void VideoPlayer::classBegin() {
+#if defined(QT4)
+ QDeclarativeItem::classBegin();
+#elif defined(QT5)
+ QQuickPaintedItem::classBegin();
+#endif
+
m_bin = gst_element_factory_make ("playbin2", "VideoPlayerBin");
if (!m_bin) {
qmlInfo(this) << "Failed to create playbin2";
return;
}
+ g_signal_connect (G_OBJECT (m_bin), "notify::volume", G_CALLBACK (on_volume_changed), this);
g_object_set (m_bin, "flags", 99, NULL);
GstElement *elem = gst_element_factory_make("pulsesink", "VideoPlayerPulseSink");
qmlInfo(this) << "Failed to create pulsesink";
}
else {
- // TODO: properties on sink
g_object_set (m_bin, "audio-sink", elem, NULL);
}
void VideoPlayer::updateRequested() {
update();
}
+
+quint32 VideoPlayer::volume() {
+ double vol = 1.0;
+ g_object_get (m_bin, "volume", &vol, NULL);
+
+ qint32 res = (int)round(vol * 100.0);
+
+ return res;
+}
+
+void VideoPlayer::setVolume(quint32 volume) {
+ if (VideoPlayer::volume() != volume) {
+ double vol = volume / 100.0;
+ g_object_set (m_bin, "volume", vol, NULL);
+ emit volumeChanged();
+ }
+}
+
+void VideoPlayer::on_volume_changed(GObject *object, GParamSpec *pspec, gpointer user_data) {
+ Q_UNUSED(object);
+ Q_UNUSED(pspec);
+
+ VideoPlayer *player = (VideoPlayer *) user_data;
+
+ QMetaObject::invokeMethod(player, "volumeChanged", Qt::QueuedConnection);
+}