*
*/
-#ifndef __MMF_PLAYER_UTILS_H__
-#define __MMF_PLAYER_UTILS_H__
+#ifndef __MM_PLAYER_UTILS_H__
+#define __MM_PLAYER_UTILS_H__
#include <glib.h>
#include <gst/gst.h>
g_mutex_lock(cmd_lock); \
else \
{ \
- debug_log("don't get command lock"); \
+ debug_log("no command lock"); \
return MM_ERROR_PLAYER_NOT_INITIALIZED; \
} \
-} while (0);
+} while (0)
#define MMPLAYER_CMD_UNLOCK(x_player) g_mutex_unlock( ((mm_player_t*)x_player)->cmd_lock )
-
#define MMPLAYER_MSG_POST_LOCK(x_player) g_mutex_lock( ((mm_player_t*)x_player)->msg_cb_lock )
#define MMPLAYER_MSG_POST_UNLOCK(x_player) g_mutex_unlock( ((mm_player_t*)x_player)->msg_cb_lock )
-
#define MMPLAYER_GET_ATTRS(x_player) ((mm_player_t*)x_player)->attrs
-/* sbs : for bluetooth */
-#define MAX_SOUND_DEVICE_LEN 18
+#define MMPLAYER_PLAYBACK_LOCK(x_player) \
+do \
+{ \
+ GMutex* playback_lock = ((mm_player_t *)x_player)->playback_lock; \
+ if (playback_lock) \
+ { \
+ debug_log("lock playback_lock"); \
+ g_mutex_lock(playback_lock); \
+ } \
+ else \
+ { \
+ debug_log("no playback lock"); \
+ } \
+} while (0)
+
+#define MMPLAYER_PLAYBACK_UNLOCK(x_player) \
+do \
+{ \
+ GMutex* playback_lock = ((mm_player_t *)x_player)->playback_lock; \
+ if (playback_lock) \
+ { \
+ g_mutex_unlock( ((mm_player_t*)x_player)->playback_lock ); \
+ debug_log("unlock playback_lock"); \
+ } \
+ else \
+ { \
+ debug_warning("can't unlock> no playback lock"); \
+ } \
+} while (0)
+
+#if 0
+#define MMPLAYER_FENTER(); debug_fenter();
+#define MMPLAYER_FLEAVE(); debug_fleave();
+#else
+#define MMPLAYER_FENTER();
+#define MMPLAYER_FLEAVE();
+#endif
+
+#define MAX_SOUND_DEVICE_LEN 18
/* element linking */
#ifdef GST_EXT_PAD_LINK_UNCHECKED
#define GST_ELEMENT_LINK_FILTERED gst_element_link_filtered
#define GST_ELEMENT_LINK_MANY gst_element_link_many
#define GST_ELEMENT_LINK gst_element_link
+#define GST_ELEMENT_UNLINK gst_element_unlink
#define GST_ELEMENT_LINK_PADS gst_element_link_pads
#define GST_PAD_LINK gst_pad_link
#endif
caps_type = gst_caps_to_string(x_caps); \
debug_log ("caps: %s\n", caps_type ); \
MMPLAYER_FREEIF (caps_type) \
-} while (0);
+} while (0)
/* message posting */
#define MMPLAYER_POST_MSG( x_player, x_msgtype, x_msg_param ) \
/* setting player state */
#define MMPLAYER_SET_STATE( x_player, x_state ) \
-debug_log("setting player state to %d\n", x_state); \
+debug_log("update state machine to %d\n", x_state); \
__mmplayer_set_state(x_player, x_state);
-
#define MMPLAYER_CHECK_STATE_RETURN_IF_FAIL( x_player, x_command ) \
debug_log("checking player state before doing %s\n", #x_command); \
switch ( __mmplayer_check_state(x_player, x_command) ) \
case MM_ERROR_PLAYER_NO_OP: \
return MM_ERROR_NONE; \
break; \
+ case MM_ERROR_PLAYER_DOING_SEEK: \
+ return MM_ERROR_PLAYER_DOING_SEEK; \
default: \
break; \
}
-/* setting element state */
+/* setting element state */
#define MMPLAYER_ELEMENT_SET_STATE( x_element, x_state ) \
debug_log("setting state [%s:%d] to [%s]\n", #x_state, x_state, GST_ELEMENT_NAME( x_element ) ); \
if ( GST_STATE_CHANGE_FAILURE == gst_element_set_state ( x_element, x_state) ) \
debug_log("it's exit state...\n");\
goto ERROR; \
}
-/* volume */
-/*
-|----|-------|-------|-------|-------|
-|Res. | HFK(7) | BT(7) | E.J(7) | SPK(7) |
-|----|-------|-------|-------|-------|
-*/
-
-/* 090424 Fix me : Currently volume is 0~9, so bt volume can be only 0.0 ~ 0.9 */
-#define GET_VOLUME_BT(volume) (volume/10.)
-
-#if 0
-#define GET_VOLUME_SPK(volume) ((volume) & 0x7F)
-#define GET_VOLUME_EARJACK(volume) ((volume >> 7)& 0x7F)
-#define GET_VOLUME_HFK(volume) ((volume >> 21) & 0x7F)
-
-#define SET_VOLUME_SPK(volume,input) (volume |= (input &0x7F))
-#define SET_VOLUME_EARJACK(volume,input) (volume |= ((input & 0x7F)<<7))
-#define SET_VOLUME_BT(volume,input) (volume |= ((input & 0x7F)<<14))
-#define SET_VOLUME_HFK(volume,input) (volume |= ((input & 0x7F)<<21))
-#endif
-
/* pad probe for pipeilne debugging */
gboolean __util_gst_pad_probe(GstPad *pad, GstBuffer *buffer, gpointer u_data);
#define MM_PROBE_CLOCK_TIME (1 << 5)
/* ... add more */
-/* messages are treated as warnings bcz those code should not be checked in.
- * and no error handling will supported for same manner.
+/* messages are treated as warnings bcz those code should not be checked in.
+ * and no error handling will supported for same manner.
*/
#define MMPLAYER_ADD_PROBE(x_pad, x_flag) \
debug_warning("adding pad probe\n"); \
/* generating dot */
#define MMPLAYER_GENERATE_DOT_IF_ENABLED( x_player, x_name ) \
-if ( PLAYER_INI()->generate_dot ) \
+if ( x_player->ini.generate_dot ) \
{ \
- debug_log("generating dot file(%s)\n", #x_name); \
GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN (player->pipeline->mainbin[MMPLAYER_M_PIPE].gst), \
GST_DEBUG_GRAPH_SHOW_ALL, x_name); \
}
/* signal manipulation */
-#define MMPLAYER_SIGNAL_CONNECT( x_player, x_object, x_signal, x_callback, x_arg ) \
+#define MMPLAYER_SIGNAL_CONNECT( x_player, x_object, x_type, x_signal, x_callback, x_arg ) \
do \
{ \
MMPlayerSignalItem* item = NULL; \
item->obj = G_OBJECT( x_object ); \
item->sig = g_signal_connect( G_OBJECT(x_object), x_signal, \
x_callback, x_arg ); \
- x_player->signals = g_list_append(x_player->signals, item); \
+ if ((x_type >= MM_PLAYER_SIGNAL_TYPE_AUTOPLUG) && (x_type < MM_PLAYER_SIGNAL_TYPE_MAX)) \
+ x_player->signals[x_type] = g_list_append(x_player->signals[x_type], item); \
+ else \
+ debug_error("wrong signal type [%d]\n", x_type ); \
} \
} while ( 0 );
+/* release element resource */
+#define MMPLAYER_RELEASE_ELEMENT( x_player, x_bin, x_id ) \
+do \
+{ \
+ if (x_bin[x_id].gst) \
+ { \
+ gst_element_set_state(x_bin[x_id].gst, GST_STATE_NULL); \
+ gst_bin_remove(GST_BIN(x_player->pipeline->mainbin[MMPLAYER_M_PIPE].gst), x_bin[x_id].gst); \
+ x_bin[x_id].gst = NULL; \
+ debug_log("release done [element %d]", x_id); \
+ } \
+} while ( 0 )
/* state */
-#define MMPLAYER_PREV_STATE(x_player) ((mm_player_t*)x_player)->prev_state
-#define MMPLAYER_CURRENT_STATE(x_player) ((mm_player_t*)x_player)->state
-#define MMPLAYER_PENDING_STATE(x_player) ((mm_player_t*)x_player)->pending_state
-#define MMPLAYER_TARGET_STATE(x_player) ((mm_player_t*)x_player)->target_state
+#define MMPLAYER_PREV_STATE(x_player) ((mm_player_t*)x_player)->prev_state
+#define MMPLAYER_CURRENT_STATE(x_player) ((mm_player_t*)x_player)->state
+#define MMPLAYER_PENDING_STATE(x_player) ((mm_player_t*)x_player)->pending_state
+#define MMPLAYER_TARGET_STATE(x_player) ((mm_player_t*)x_player)->target_state
#define MMPLAYER_STATE_GET_NAME(state) __get_state_name(state)
#define MMPLAYER_PRINT_STATE(x_player) \
-debug_log("-----------------------PLAYER STATE-------------------------\n"); \
-debug_log(" prev %s, current %s, pending %s, target %s \n", \
+debug_log("-- prev %s, current %s, pending %s, target %s --\n", \
MMPLAYER_STATE_GET_NAME(MMPLAYER_PREV_STATE(x_player)), \
MMPLAYER_STATE_GET_NAME(MMPLAYER_CURRENT_STATE(x_player)), \
MMPLAYER_STATE_GET_NAME(MMPLAYER_PENDING_STATE(x_player)), \
- MMPLAYER_STATE_GET_NAME(MMPLAYER_TARGET_STATE(x_player))); \
-debug_log("------------------------------------------------------------\n");
-
+ MMPLAYER_STATE_GET_NAME(MMPLAYER_TARGET_STATE(x_player)));
-#define MMPLAYER_STATE_CHANGE_TIMEOUT(x_player ) ((mm_player_t*)x_player)->state_change_timeout
+#define MMPLAYER_STATE_CHANGE_TIMEOUT(x_player ) ((mm_player_t*)x_player)->state_change_timeout
/* streaming */
#define MMPLAYER_IS_STREAMING(x_player) __is_streaming(x_player)
#define MMPLAYER_IS_RTSP_STREAMING(x_player) __is_rtsp_streaming(x_player)
+#define MMPLAYER_IS_WFD_STREAMING(x_player) __is_wfd_streaming(x_player)
#define MMPLAYER_IS_HTTP_STREAMING(x_player) __is_http_streaming(x_player)
#define MMPLAYER_IS_HTTP_PD(x_player) __is_http_progressive_down(x_player)
#define MMPLAYER_IS_HTTP_LIVE_STREAMING(x_player) __is_http_live_streaming(x_player)
#define MMPLAYER_IS_LIVE_STREAMING(x_player) __is_live_streaming(x_player)
+#define MMPLAYER_IS_DASH_STREAMING(x_player) __is_dash_streaming(x_player)
+#define MMPLAYER_IS_SMOOTH_STREAMING(x_player) __is_smooth_streaming(x_player)
+
+#define MMPLAYER_URL_HAS_DASH_SUFFIX(x_player) __has_suffix(x_player, "mpd")
+#define MMPLAYER_URL_HAS_HLS_SUFFIX(x_player) __has_suffix(x_player, "m3u8")
/* etc */
#define MMF_PLAYER_FILE_BACKUP_PATH "/tmp/media_temp."
#define MMPLAYER_PT_IS_AUDIO( x_pt ) ( strstr(x_pt, "_97") || strstr(x_pt, "audio") )
#define MMPLAYER_PT_IS_VIDEO( x_pt ) ( strstr(x_pt, "_96") || strstr(x_pt, "video") )
+#define MMPLAYER_VIDEO_SINK_CHECK(x_player) \
+do \
+{ \
+ return_val_if_fail ( x_player && \
+ x_player->pipeline && \
+ x_player->pipeline->videobin && \
+ x_player->pipeline->videobin[MMPLAYER_V_SINK].gst, \
+ MM_ERROR_PLAYER_NOT_INITIALIZED ); \
+} while(0)
+
+enum
+{
+ MMPLAYER_DISPLAY_NULL = 0,
+ MMPLAYER_DISPLAY_HDMI_ACTIVE,
+ MMPLAYER_DISPLAY_MIRRORING_ACTIVE,
+};
+
bool util_is_sdp_file ( const char *path );
int64_t uti_get_time ( void );
int util_get_rank_increase ( const char *factory_class );
int util_factory_rank_compare(GstPluginFeature *f1, GstPluginFeature *f2); // @
-
-
-bool util_exist_file_path(const char *file_path);
+int util_exist_file_path(const char *file_path);
bool util_write_file_backup(const char *backup_path, char *data_ptr, int data_size);
bool util_remove_file_backup(const char *backup_path); /* For Midi Player */
-
int util_is_midi_type_by_mem(void *mem, int size);
int util_is_midi_type_by_file(const char *file_path);
-
char** util_get_cookie_list ( const char *cookies );
bool util_check_valid_url ( const char *proxy );
+const char* util_get_charset(const char *file_path);
+
+int util_get_is_connected_external_display(void);
+gboolean util_is_miracast_connected(void);
+int util_get_pixtype(unsigned int fourcc);
#ifdef __cplusplus
}
#endif
-#endif /* __MMF_PLAYER_UTILS_H__ */
+#endif /* __MM_PLAYER_UTILS_H__ */