aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonan Le Martret <ronan.lemartret@iot.bzh>2017-12-05 11:06:07 +0100
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2017-12-21 21:41:51 +0000
commite1d1561cd7061e5c2d72507e3ab367f94ed655d4 (patch)
tree043a3ea94f1ac12fb97f222f7403399c4c3defe0
parent381b4ed77c3b11efa5e7619253133146a44df911 (diff)
Add 4A support
Add conditional compilation option to enable using the 4A high-level API to request Multimedia role access. Change-Id: I85c19e33a355f9133bdda837e9374776fc92efe9 Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh> Signed-off-by: Scott Murray <scott.murray@konsulko.com> (cherry picked from commit d03590991d2c7104e7cd4b2a18e710008b2759ab)
-rw-r--r--binding/CMakeLists.txt3
-rw-r--r--binding/afm-mediaplayer-binding.c29
-rw-r--r--conf.d/cmake/config.cmake6
-rw-r--r--conf.d/wgt/config-4a.xml.in25
4 files changed, 62 insertions, 1 deletions
diff --git a/binding/CMakeLists.txt b/binding/CMakeLists.txt
index 02f2aa9..2df218b 100644
--- a/binding/CMakeLists.txt
+++ b/binding/CMakeLists.txt
@@ -39,3 +39,6 @@ PROJECT_TARGET_ADD(afm-mediaplayer-binding)
INSTALL(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${BINDINGS_INSTALL_DIR})
+ if(HAVE_4A_FRAMEWORK)
+ add_definitions(-DHAVE_4A_FRAMEWORK)
+ endif()
diff --git a/binding/afm-mediaplayer-binding.c b/binding/afm-mediaplayer-binding.c
index 2e3bef2..478ba0e 100644
--- a/binding/afm-mediaplayer-binding.c
+++ b/binding/afm-mediaplayer-binding.c
@@ -660,6 +660,35 @@ static void *gstreamer_loop_thread(void *ptr)
data.fake_sink = gst_element_factory_make("fakesink", NULL);
data.alsa_sink = gst_element_factory_make("alsasink", NULL);
+#ifdef HAVE_4A_FRAMEWORK
+ json_object *jsonData = json_object_new_object();
+ json_object_object_add(jsonData, "audio_role", json_object_new_string("Multimedia"));
+ json_object_object_add(jsonData, "endpoint_type", json_object_new_string("sink"));
+ ret = afb_service_call_sync("ahl-4a", "stream_open", jsonData, &response);
+
+ if (!ret) {
+ json_object *valJson = NULL;
+ json_object *val = NULL;
+ gboolean ret;
+ ret = json_object_object_get_ex(response, "response", &valJson);
+ if (ret) {
+ ret = json_object_object_get_ex(valJson, "device_uri", &val);
+ if (ret) {
+ char* jres_pcm = json_object_get_string(val);
+ gchar ** res_pcm= g_strsplit (jres_pcm,":",-1);
+ if (res_pcm) {
+ g_object_set(data.alsa_sink, "device", res_pcm[1], NULL);
+ g_free(res_pcm);
+ }
+ }
+ ret = json_object_object_get_ex(valJson, "stream_id", &val);
+ if (ret) {
+ int stream_id = json_object_get_int(val);
+ }
+ }
+ }
+#endif
+
g_object_set(data.playbin, "audio-sink", data.fake_sink, NULL);
gst_element_set_state(data.playbin, GST_STATE_PAUSED);
diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake
index e7e6143..92c7ee1 100644
--- a/conf.d/cmake/config.cmake
+++ b/conf.d/cmake/config.cmake
@@ -86,7 +86,11 @@ set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib)
# Optional location for config.xml.in
# -----------------------------------
-set(WIDGET_CONFIG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config.xml.in)
+if(HAVE_4A_FRAMEWORK)
+ set(WIDGET_CONFIG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config-4a.xml.in)
+else()
+ set(WIDGET_CONFIG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config.xml.in)
+endif()
# Mandatory widget Mimetype specification of the main unit
# --------------------------------------------------------------------------
diff --git a/conf.d/wgt/config-4a.xml.in b/conf.d/wgt/config-4a.xml.in
new file mode 100644
index 0000000..a6ab311
--- /dev/null
+++ b/conf.d/wgt/config-4a.xml.in
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
+ <description>@PROJECT_DESCRIPTION@</description>
+ <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
+ <license>@PROJECT_LICENSE@</license>
+
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission::public:hidden" value="required" />
+ <param name="urn:AGL:permission::public:no-htdocs" value="required" />
+ <param name="urn:AGL:permission:audio:public:audiostream" value="required" />
+ </feature>
+
+ <feature name="urn:AGL:widget:provided-api">
+ <param name="mediaplayer" value="ws" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-api">
+ <param name="mediascanner" value="ws" />
+ <param name="ahl-4a" value="ws" />
+ <param name="@WIDGET_ENTRY_POINT@" value="local" />
+ </feature>
+</widget>