#define MMPLAYER_BUS_MSG_THREAD_WAIT_UNTIL(x_player, end_time) g_cond_wait_until(&((mmplayer_t *)x_player)->bus_msg_thread_cond, &((mmplayer_t *)x_player)->bus_msg_thread_mutex, end_time)
#define MMPLAYER_BUS_MSG_THREAD_SIGNAL(x_player) g_cond_signal(&((mmplayer_t *)x_player)->bus_msg_thread_cond);
+/* gst bus watcher thread */
+#define MMPLAYER_BUS_WATCHER_LOCK(x_player) g_mutex_lock(&((mmplayer_t *)x_player)->bus_watcher_mutex)
+#define MMPLAYER_BUS_WATCHER_UNLOCK(x_player) g_mutex_unlock(&((mmplayer_t *)x_player)->bus_watcher_mutex)
+#define MMPLAYER_BUS_WATCHER_WAIT_UNTIL(x_player, end_time) g_cond_wait_until(&((mmplayer_t *)x_player)->bus_watcher_cond, &((mmplayer_t *)x_player)->bus_watcher_mutex, end_time)
+#define MMPLAYER_BUS_WATCHER_SIGNAL(x_player) g_cond_signal(&((mmplayer_t *)x_player)->bus_watcher_cond);
+
/* handling fakesink */
#define MMPLAYER_FSINK_LOCK(x_player) g_mutex_lock(&((mmplayer_t *)x_player)->fsink_lock)
#define MMPLAYER_FSINK_UNLOCK(x_player) g_mutex_unlock(&((mmplayer_t *)x_player)->fsink_lock)