From a1797fdad6b12bef6548c55dc52b0b3de232ea07 Mon Sep 17 00:00:00 2001
From: Scott Murray <scott.murray@konsulko.com>
Date: Wed, 24 Jul 2019 18:33:03 -0400
Subject: Switch to pipewire output

Change from ALSA sink to new pipewire sink for output, and add setting
of the pipewire media role property.

Bug-AGL: SPEC-2634

Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Idc1dca82c8329071698ef0766a0ec1f50d90a98f
(cherry picked from commit 049ff63ded31c90479e3aac10aa5624b2374bae6)
---
 app/fileplayer.cpp | 13 +++++++------
 app/fileplayer.h   |  2 +-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/app/fileplayer.cpp b/app/fileplayer.cpp
index 85d2440..dfd609a 100644
--- a/app/fileplayer.cpp
+++ b/app/fileplayer.cpp
@@ -39,9 +39,10 @@ FilePlayer::FilePlayer(const std::string &path, const std::string &role) :
 
 	// Create elements we need
 	m_playbin = gst_element_factory_make("playbin", "play");
-	m_alsa_sink = gst_element_factory_make("alsasink", NULL);
-	if(!(m_playbin && m_alsa_sink))
+	m_audio_sink = gst_element_factory_make("pwaudiosink", NULL);
+	if(!(m_playbin && m_audio_sink))
 		goto error;
+	gst_util_set_object_arg(G_OBJECT(m_audio_sink), "stream-properties", "p,media.role=Communication");
 
 	// Set up bus callback
 	m_bus = gst_pipeline_get_bus(GST_PIPELINE(m_playbin));
@@ -60,8 +61,8 @@ FilePlayer::FilePlayer(const std::string &path, const std::string &role) :
 error:
 	gst_object_unref(m_playbin);
 	m_playbin = nullptr;
-	gst_object_unref(m_alsa_sink);
-	m_alsa_sink = nullptr;
+	gst_object_unref(m_audio_sink);
+	m_audio_sink = nullptr;
 	gst_object_unref(m_bus);
 	m_bus = nullptr;
 
@@ -76,7 +77,7 @@ FilePlayer::~FilePlayer(void)
 {
 	gst_element_set_state(m_playbin, GST_STATE_NULL);
 	gst_object_unref(m_playbin);
-	gst_object_unref(m_alsa_sink);
+	gst_object_unref(m_audio_sink);
 	gst_object_unref(m_bus);
 }
 
@@ -88,7 +89,7 @@ void FilePlayer::play(bool loop)
 	m_playing = true;
 	m_looping = loop;
 
-	g_object_set(m_playbin, "audio-sink", m_alsa_sink, NULL);
+	g_object_set(m_playbin, "audio-sink", m_audio_sink, NULL);
 	std::string uri = "file://" + m_path;
 	g_object_set(m_playbin, "uri", uri.c_str(), NULL);
 
diff --git a/app/fileplayer.h b/app/fileplayer.h
index a580409..6d49b1a 100644
--- a/app/fileplayer.h
+++ b/app/fileplayer.h
@@ -38,7 +38,7 @@ private:
 	std::thread m_gst_thread;
 	GMainLoop *m_gst_loop = nullptr;
 	GstElement *m_playbin = nullptr;
-	GstElement *m_alsa_sink = nullptr;
+	GstElement *m_audio_sink = nullptr;
 	GstBus *m_bus = nullptr;
 	bool m_valid = false;
 	bool m_playing = false;
-- 
cgit