#define MEDIA_PATH_EXTERNAL tzplatform_getenv(TZ_SYS_STORAGE) /* external storage, sd card, usb */
#define FD_NUM_FOR_DEBUG 10
+#define CMD_LOCK_TICKET_MAX (G_MAXUINT - 1)
const gchar *
_mmplayer_get_stream_type_name(int type)
}
gboolean
+_mmplayer_is_adaptive_streaming(mmplayer_t *player)
+{
+ MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
+ return (_mmplayer_is_http_live_streaming(player) || _mmplayer_is_dash_streaming(player)
+ || _mmplayer_is_smooth_streaming(player)) ? TRUE : FALSE;
+}
+
+gboolean
_mmplayer_is_ms_buff_src(mmplayer_t *player)
{
MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
}
}
-gboolean _mmplayer_use_uridecodebin3(mmplayer_t *player) /* MMPLAYER_USE_URIDECODEBIN3(player) */
+gboolean _mmplayer_use_decodebin(mmplayer_t *player) /* MMPLAYER_USE_DECODEBIN(player) */
{
+ int audio_offload = 0;
MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
- if (MMPLAYER_IS_RTSP_STREAMING(player) ||
- MMPLAYER_IS_MS_BUFF_SRC(player))
+ mm_attrs_get_int_by_name(player->attrs, MM_PLAYER_AUDIO_OFFLOAD, &audio_offload); /* user requirement */
+
+ if (MMPLAYER_IS_MS_BUFF_SRC(player) || player->ini.use_decodebin || audio_offload)
+ return TRUE;
+
+ return FALSE;
+}
+
+void _mmplayer_cmd_lock_init(mmplayer_t *player)
+{
+ MMPLAYER_RETURN_IF_FAIL(player);
+ player->cmd_lock = g_new0(mmplayer_ticket_lock_t, 1);
+ g_mutex_init(&player->cmd_lock->ticket_mutex);
+ g_cond_init(&player->cmd_lock->ticket_cond);
+ player->cmd_lock->ticket_queue_head = 0;
+ player->cmd_lock->ticket_queue_tail = 0;
+}
+
+void _mmplayer_cmd_lock_deinit(mmplayer_t *player)
+{
+ MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
+ g_mutex_clear(&player->cmd_lock->ticket_mutex);
+ g_cond_clear(&player->cmd_lock->ticket_cond);
+ player->cmd_lock->ticket_queue_head = 0;
+ player->cmd_lock->ticket_queue_tail = 0;
+ g_free(player->cmd_lock);
+}
+
+void _mmplayer_cmd_lock(mmplayer_t *player)
+{
+ guint64 queue_me;
+ GCond *cond;
+ GMutex *mutex;
+
+ MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
+
+ cond = &player->cmd_lock->ticket_cond;
+ mutex = &player->cmd_lock->ticket_mutex;
+ g_mutex_lock(mutex);
+ queue_me = player->cmd_lock->ticket_queue_tail;
+ player->cmd_lock->ticket_queue_tail = (queue_me + 1) % CMD_LOCK_TICKET_MAX;
+ while (queue_me != player->cmd_lock->ticket_queue_head)
+ g_cond_wait(cond, mutex);
+ g_mutex_unlock(mutex);
+}
+
+gboolean _mmplayer_cmd_trylock(mmplayer_t *player)
+{
+ GMutex *mutex;
+
+ MMPLAYER_RETURN_VAL_IF_FAIL(player && player->cmd_lock, FALSE);
+
+ mutex = &player->cmd_lock->ticket_mutex;
+
+ if (!g_mutex_trylock(mutex))
return FALSE;
- if (!player->ini.use_uridecodebin3)
+ if (player->cmd_lock->ticket_queue_tail != player->cmd_lock->ticket_queue_head) {
+ g_mutex_unlock(mutex);
return FALSE;
+ }
+ g_mutex_unlock(mutex);
+ _mmplayer_cmd_lock(player);
return TRUE;
}
+
+void _mmplayer_cmd_unlock(mmplayer_t *player)
+{
+ GCond *cond;
+ GMutex *mutex;
+
+ MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
+
+ cond = &player->cmd_lock->ticket_cond;
+ mutex = &player->cmd_lock->ticket_mutex;
+
+ g_mutex_lock(mutex);
+ player->cmd_lock->ticket_queue_head =
+ (player->cmd_lock->ticket_queue_head + 1) % CMD_LOCK_TICKET_MAX;
+ g_cond_broadcast(cond);
+ g_mutex_unlock(mutex);
+}