static void on_seek_cb(void *user_data);
// Cll from media internal thread:
- static void on_sound_stream_focus_state_watch_cb(sound_stream_focus_mask_e focus_mask,
+ static void on_sound_stream_focus_state_watch_cb(int id, sound_stream_focus_mask_e focus_mask,
sound_stream_focus_state_e focus_state, sound_stream_focus_change_reason_e reason,
const char *extra_info, void *user_data);
player_state_e getState() const;
IMediaPlayerListener *m_pListener;
bool m_Focus;
bool m_FocusCallReason;
+
+ int m_SoundManagerCallbackId;
};
class IMediaPlayerListener
, m_pListener(nullptr)
, m_Focus(false)
, m_FocusCallReason(false)
+ , m_SoundManagerCallbackId(-1)
{
- sound_manager_set_focus_state_watch_cb(SOUND_STREAM_FOCUS_FOR_PLAYBACK, on_sound_stream_focus_state_watch_cb, this);
+ sound_manager_add_focus_state_watch_cb(SOUND_STREAM_FOCUS_FOR_PLAYBACK,
+ on_sound_stream_focus_state_watch_cb, this, &m_SoundManagerCallbackId);
+
+ MSG_LOG("callback-id = ", m_SoundManagerCallbackId);
player_create(&m_Player);
player_set_sound_type(m_Player, SOUND_TYPE_MEDIA);
player_set_volume(m_Player, 1.0, 1.0);
MediaPlayer::~MediaPlayer()
{
- sound_manager_unset_focus_state_watch_cb();
+ sound_manager_remove_focus_state_watch_cb(m_SoundManagerCallbackId);
m_pListener = nullptr;
stop();
player_unprepare(m_Player);
MSG_LOG("");
}
-void MediaPlayer::on_sound_stream_focus_state_watch_cb(sound_stream_focus_mask_e focus_mask,
- sound_stream_focus_state_e focus_state, sound_stream_focus_change_reason_e reason,
- const char *extra_info, void *user_data)
+void MediaPlayer::on_sound_stream_focus_state_watch_cb(int id,
+ sound_stream_focus_mask_e focus_mask,
+ sound_stream_focus_state_e focus_state,
+ sound_stream_focus_change_reason_e reason,
+ const char *extra_info,
+ void *user_data)
{
+ MSG_LOG("callback-id = ", id);
MSG_LOG("Interrupted focus state = ", focus_state);
MSG_LOG("Interrupted focus change reason = ", reason);
auto *self = static_cast<MediaPlayer*>(user_data);
+ if(id != self->m_SoundManagerCallbackId)
+ return;
self->m_Focus = focus_state == SOUND_STREAM_FOCUS_STATE_RELEASED;
self->m_FocusCallReason = reason == SOUND_STREAM_FOCUS_CHANGED_BY_RINGTONE ||
reason == SOUND_STREAM_FOCUS_CHANGED_BY_VOIP ||