summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGilbok Lee <gilbok.lee@samsung.com>2017-06-07 21:29:27 +0900
committerGilbok Lee <gilbok.lee@samsung.com>2017-06-07 21:29:27 +0900
commit9089a193386f93193f4641790d02cd7c335864bb (patch)
treeb1684b4cca59dd0c32291678d594334758fab859 /src
parent04c6b15e4ab97af1ac388f2347e1005cceeff344 (diff)
downloadlibmm-radio-9089a193386f93193f4641790d02cd7c335864bb.tar.gz
libmm-radio-9089a193386f93193f4641790d02cd7c335864bb.tar.bz2
libmm-radio-9089a193386f93193f4641790d02cd7c335864bb.zip
[Version] 0.2.28 [Profile] Mobile, Wearable [Issue Type] Add features Change-Id: I5280a82950db377c21b0938e7edf306ba9aa3d43
Diffstat (limited to 'src')
-rw-r--r--src/include/mm_radio_priv.h2
-rw-r--r--src/mm_radio_priv_emulator.c61
-rw-r--r--src/mm_radio_resource.c4
3 files changed, 65 insertions, 2 deletions
diff --git a/src/include/mm_radio_priv.h b/src/include/mm_radio_priv.h
index 9e1eb3f..f45faac 100644
--- a/src/include/mm_radio_priv.h
+++ b/src/include/mm_radio_priv.h
@@ -39,6 +39,7 @@
#include "mm_radio.h"
#include "mm_radio_utils.h"
+#include "mm_radio_resource.h"
#include <linux/videodev2.h>
#include <gst/gst.h>
@@ -190,6 +191,7 @@ typedef struct {
#ifdef USE_GST_PIPELINE
mm_radio_gstreamer_s* pGstreamer_s;
#endif
+ mm_radio_resource_manager resource_manager;
unsigned int subs_id;
float local_volume;
diff --git a/src/mm_radio_priv_emulator.c b/src/mm_radio_priv_emulator.c
index 609f6a6..b82ed06 100644
--- a/src/mm_radio_priv_emulator.c
+++ b/src/mm_radio_priv_emulator.c
@@ -239,6 +239,13 @@ int _mmradio_create_radio(mm_radio_t * radio)
MMRADIO_SET_STATE(radio, MM_RADIO_STATE_NULL);
+ /* initialize resource manager */
+ ret = mmradio_resource_manager_init(&(radio->resource_manager), radio);
+ if (ret) {
+ MMRADIO_LOG_ERROR("failed to initialize resource manager\n");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
/* register to audio focus */
ret = mmradio_sound_focus_register(&radio->sound_focus,
@@ -366,6 +373,12 @@ int _mmradio_destroy(mm_radio_t * radio)
}
#endif
+ ret = mmradio_resource_manager_deinit(&radio->resource_manager);
+ if (ret) {
+ MMRADIO_LOG_ERROR("failed to initialize resource manager\n");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
+
MMRADIO_LOG_FLEAVE();
return MM_ERROR_NONE;
@@ -577,6 +590,19 @@ int _mmradio_start(mm_radio_t * radio)
MMRADIO_SLOG_DEBUG("now tune to frequency : %d\n", radio->freq);
+ ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("resource manager prepare fail");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
+
+ ret = mmradio_resource_manager_acquire(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("failed to acquire resource manager");
+ mmradio_resource_manager_unprepare(&radio->resource_manager);
+ return ret;
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
if (radio->sound_focus.handle > 0) {
ret = mmradio_acquire_sound_focus(&radio->sound_focus);
@@ -637,6 +663,7 @@ int _mmradio_start(mm_radio_t * radio)
int _mmradio_stop(mm_radio_t * radio)
{
int ret = MM_ERROR_NONE;
+ mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
MMRADIO_LOG_FENTER();
@@ -646,6 +673,25 @@ int _mmradio_stop(mm_radio_t * radio)
/* if( _mmradio_mute(radio) != MM_ERROR_NONE) */
/* return MM_ERROR_RADIO_NOT_INITIALIZED; */
+ if (!radio->resource_manager.by_rm_cb && /* is being released */
+ mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
+ ret = mmradio_resource_manager_release(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
+ return ret;
+ }
+ }
+ }
+
+ if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
+ ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE)
+ MMRADIO_LOG_ERROR("resource manager unprepare fail");
+ }
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
if (radio->sound_focus.handle > 0) {
ret = mmradio_release_sound_focus(&radio->sound_focus);
@@ -1274,13 +1320,24 @@ static bool __mmradio_set_state(mm_radio_t * radio, int new_state)
msg.state.code = radio->sound_focus.event_src;
MMRADIO_POST_MSG(radio, msg_type, &msg);
radio->sound_focus.by_focus_cb = false;
+ } else if (radio->resource_manager.by_rm_cb) {
+ msg_type = MM_MESSAGE_STATE_INTERRUPTED;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
} else {
msg_type = MM_MESSAGE_STATE_CHANGED;
MMRADIO_POST_MSG(radio, msg_type, &msg);
}
#else
- msg_type = MM_MESSAGE_STATE_CHANGED;
- MMRADIO_POST_MSG(radio, msg_type, &msg);
+ if (radio->resource_manager.by_rm_cb) {
+ msg_type = MM_MESSAGE_STATE_INTERRUPTED;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
+ } else {
+ msg_type = MM_MESSAGE_STATE_CHANGED;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
+ }
+
#endif
MMRADIO_LOG_FLEAVE();
diff --git a/src/mm_radio_resource.c b/src/mm_radio_resource.c
index d474716..e87f8fa 100644
--- a/src/mm_radio_resource.c
+++ b/src/mm_radio_resource.c
@@ -18,7 +18,11 @@
*/
#include "mm_radio_utils.h"
+#ifdef TIZEN_FEATURE_RADIO_HAL
#include "mm_radio_priv_hal.h"
+#else
+#include "mm_radio_priv.h"
+#endif
#include "mm_radio_resource.h"
#include <murphy/common/glib-glue.h>