From fc00704eafd27305b9ca7e842b0321e0007d3154 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Wed, 16 Jan 2019 19:44:28 -0500 Subject: Replace QtMultimedia usage with 4A + gstreamer 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 --- app/fileplayer.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 app/fileplayer.h (limited to 'app/fileplayer.h') 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 +#include +#include + +extern "C" +{ +#include +#include +#include +} + +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 -- cgit 1.2.3-korg