summaryrefslogtreecommitdiffstats
path: root/app/fileplayer.h
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2019-01-16 19:44:28 -0500
committerScott Murray <scott.murray@konsulko.com>2019-01-17 21:47:28 -0500
commitfc00704eafd27305b9ca7e842b0321e0007d3154 (patch)
tree33920f5d07a122474d5187a41575627e4c4d3c2b /app/fileplayer.h
parent9fcf22b389c92f3952769ae73750112d1417e5dc (diff)
Replace QtMultimedia usage for ringtone playing with a gstreamer pipeline that uses the provided 4A role ALSA device for output. For now, a "phone" role is assumed to be available, but it does not exist in the current set of 4A policy and HALs, and needs to be added. Testing was done by making the required role changes locally and using some debug QML tweaks to allow triggering the ringtone manually. Bug-AGL: SPEC-1596 Change-Id: I55c2229de1bc5470ee818e5be382b64664fa2d29 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Diffstat (limited to 'app/fileplayer.h')
-rw-r--r--app/fileplayer.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/app/fileplayer.h b/app/fileplayer.h
new file mode 100644
index 0000000..5f52370
--- /dev/null
+++ b/app/fileplayer.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018 Konsulko Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FILEPLAYER_H
+#define FILEPLAYER_H
+
+#include <string>
+#include <thread>
+#include <gst/gst.h>
+
+extern "C"
+{
+#include <afb/afb-wsj1.h>
+#include <afb/afb-ws-client.h>
+#include <systemd/sd-event.h>
+}
+
+class FilePlayer
+{
+public:
+ FilePlayer(int port, const std::string &token, const std::string &path, const std::string &role);
+ ~FilePlayer();
+
+ void play(bool loop = false);
+ void stop(void);
+
+ static gboolean gstreamer_bus_callback(GstBus *bus, GstMessage *msg, gpointer data);
+
+private:
+ std::string m_path;
+ std::string m_role;
+ struct afb_wsj1 *m_ws = nullptr;
+ struct afb_wsj1_itf m_itf;
+ std::thread m_afb_thread;
+ sd_event *m_afb_loop = nullptr;
+ std::thread m_gst_thread;
+ GMainLoop *m_gst_loop = nullptr;
+ GstElement *m_playbin = nullptr;
+ GstElement *m_alsa_sink = nullptr;
+ GstBus *m_bus = nullptr;
+ bool m_valid = false;
+ bool m_playing = false;
+ bool m_looping = false;
+
+ int set_role_state(bool state, std::string *output = nullptr);
+ gboolean bus_callback(GstBus *bus, GstMessage *msg);
+};
+
+#endif // FILEPLAYER_H