#define MMPLAYER_FSINK_LOCK(x_player) g_mutex_lock(&((mm_player_t *)x_player)->fsink_lock)
#define MMPLAYER_FSINK_UNLOCK(x_player) g_mutex_unlock(&((mm_player_t *)x_player)->fsink_lock)
+
+/* handling update tag */
+#define MMPLAYER_UPDATE_TAG_LOCK(x_player) g_mutex_lock(&((mm_player_t *)x_player)->update_tag_lock)
+#define MMPLAYER_UPDATE_TAG_UNLOCK(x_player) g_mutex_unlock(&((mm_player_t *)x_player)->update_tag_lock)
+
/* video stream bo */
#define MMPLAYER_VIDEO_BO_LOCK(x_player) g_mutex_lock(&((mm_player_t *)x_player)->video_bo_mutex)
#define MMPLAYER_VIDEO_BO_UNLOCK(x_player) g_mutex_unlock(&((mm_player_t *)x_player)->video_bo_mutex)
MMPLAYER_UPDATE_TAG_STRING(GST_TAG_AUDIO_CODEC, attrs, "content_audio_codec");
MMPLAYER_UPDATE_TAG_UINT(GST_TAG_BITRATE, attrs, "content_bitrate");
MMPLAYER_UPDATE_TAG_UINT(GST_TAG_MAXIMUM_BITRATE, attrs, "content_max_bitrate");
+ MMPLAYER_UPDATE_TAG_LOCK(player);
MMPLAYER_UPDATE_TAG_IMAGE(GST_TAG_IMAGE, attrs, "tag_album_cover");
+ MMPLAYER_UPDATE_TAG_UNLOCK(player);
/* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_NOMINAL_BITRATE, ?, ?); */
/* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_MINIMUM_BITRATE, ?, ?); */
/* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_SERIAL, ?, ?); */
/* create lock. note that g_tread_init() has already called in gst_init() */
g_mutex_init(&player->fsink_lock);
+ /* create update tag lock */
+ g_mutex_init(&player->update_tag_lock);
+
/* create repeat mutex */
g_mutex_init(&player->repeat_thread_mutex);
/* free lock */
g_mutex_clear(&player->fsink_lock);
+ /* free update tag lock */
+ g_mutex_clear(&player->update_tag_lock);
+
/* free thread */
if (player->repeat_thread) {
player->repeat_thread_exit = TRUE;
/* release lock */
g_mutex_clear(&player->fsink_lock);
+ /* release lock */
+ g_mutex_clear(&player->update_tag_lock);
+
/* release video bo lock and cond */
g_mutex_clear(&player->video_bo_mutex);
g_cond_clear(&player->video_bo_cond);