[0.6.290] Fix adaptive streaming not being prepared due to upgrade to GST 1.22.7
[platform/core/multimedia/libmm-player.git] / src / include / mm_player_utils.h
index be16503..126f972 100644 (file)
 
 #define MMPLAYER_FREEIF(x) \
        do {    \
-               if (x) { \
-                       g_free(x); \
-                       x = NULL;       \
-               } \
+               g_clear_pointer(&x, g_free); \
        } while (0)
 
 #define MMPLAYER_GET_ATTRS(x_player) ((mmplayer_t *)x_player)->attrs
 
 /* command */
-#define MMPLAYER_CMD_LOCK(x_player)                          g_mutex_lock(&((mmplayer_t *)x_player)->cmd_lock)
-#define MMPLAYER_CMD_TRYLOCK(x_player)                       g_mutex_trylock(&((mmplayer_t *)x_player)->cmd_lock)
-#define MMPLAYER_CMD_UNLOCK(x_player)                        g_mutex_unlock(&((mmplayer_t *)x_player)->cmd_lock)
-
-/* playback */
-#define MMPLAYER_PLAYBACK_LOCK(x_player)                     g_mutex_lock(&((mmplayer_t *)x_player)->playback_lock)
-#define MMPLAYER_PLAYBACK_UNLOCK(x_player)                   g_mutex_unlock(&((mmplayer_t *)x_player)->playback_lock)
+#define MMPLAYER_CMD_LOCK_INIT(x_player)                     _mmplayer_cmd_lock_init((mmplayer_t *)x_player)
+#define MMPLAYER_CMD_LOCK(x_player)                          _mmplayer_cmd_lock((mmplayer_t *)x_player)
+#define MMPLAYER_CMD_TRYLOCK(x_player)                       _mmplayer_cmd_trylock((mmplayer_t *)x_player)
+#define MMPLAYER_CMD_UNLOCK(x_player)                        _mmplayer_cmd_unlock((mmplayer_t *)x_player)
+#define MMPLAYER_CMD_LOCK_DEINIT(x_player)                   _mmplayer_cmd_lock_deinit((mmplayer_t *)x_player)
+
+/* pipeline reconfigure */
+#define MMPLAYER_RECONFIGURE_LOCK(x_player)                  g_mutex_lock(&((mmplayer_t *)x_player)->reconfigure_lock)
+#define MMPLAYER_RECONFIGURE_UNLOCK(x_player)                g_mutex_unlock(&((mmplayer_t *)x_player)->reconfigure_lock)
+#define MMPLAYER_RECONFIGURE_WAIT(x_player)                  g_cond_wait(&((mmplayer_t *)x_player)->reconfigure_cond, &((mmplayer_t *)x_player)->reconfigure_lock)
+#define MMPLAYER_RECONFIGURE_SIGNAL(x_player)                g_cond_signal(&((mmplayer_t *)x_player)->reconfigure_cond);
 
 /* capture thread */
 #define MMPLAYER_CAPTURE_THREAD_LOCK(x_player)               g_mutex_lock(&((mmplayer_t *)x_player)->capture_thread_mutex)
 #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)
 #define MMPLAYER_VIDEO_BO_WAIT_UNTIL(x_player, end_time)     g_cond_wait_until(&((mmplayer_t *)x_player)->video_bo_cond, &((mmplayer_t *)x_player)->video_bo_mutex, end_time)
 #define MMPLAYER_VIDEO_BO_SIGNAL(x_player)                   g_cond_signal(&((mmplayer_t *)x_player)->video_bo_cond);
 
-/* media stream lock */
-#define MMPLAYER_MEDIA_STREAM_CALLBACK_LOCK(x_player)        g_mutex_lock(&((mmplayer_t *)x_player)->media_stream_cb_lock)
-#define MMPLAYER_MEDIA_STREAM_CALLBACK_UNLOCK(x_player)      g_mutex_unlock(&((mmplayer_t *)x_player)->media_stream_cb_lock)
-
 /* subtitle info */
 #define MMPLAYER_SUBTITLE_INFO_LOCK(x_player)                     g_mutex_lock(&((mmplayer_t *)x_player)->subtitle_info_mutex)
 #define MMPLAYER_SUBTITLE_INFO_UNLOCK(x_player)                   g_mutex_unlock(&((mmplayer_t *)x_player)->subtitle_info_mutex)
 #define MMPLAYER_POST_MSG(x_player, x_msgtype, x_msg_param) \
        do { \
                LOGD("[handle: %p] posting %s to application", x_player, #x_msgtype); \
-               __mmplayer_post_message(x_player, x_msgtype, x_msg_param); \
+               _mmplayer_post_message(x_player, x_msgtype, x_msg_param); \
        } while (0)
 
 /* setting player state */
 #define MMPLAYER_SET_STATE(x_player, x_state) \
        do { \
                LOGD("[handle: %p] update state machine to %d", x_player, x_state); \
-               __mmplayer_set_state(x_player, x_state); \
+               _mmplayer_set_state(x_player, x_state); \
        } while (0)
 
 #define MMPLAYER_CHECK_STATE(x_player, x_command) \
        do {    \
                LOGD("[handle: %p] checking player state before doing %s", x_player, #x_command); \
-               switch (__mmplayer_check_state(x_player, x_command)) { \
+               switch (_mmplayer_check_state(x_player, x_command)) { \
                case MM_ERROR_PLAYER_INVALID_STATE: \
                        return MM_ERROR_PLAYER_INVALID_STATE; \
                        break; \
 #define MMPLAYER_GENERATE_DOT_IF_ENABLED(x_player, x_name) \
        do { \
                if (x_player->ini.generate_dot) { \
-                       GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(player->pipeline->mainbin[MMPLAYER_M_PIPE].gst), \
+                       GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(player->pipeline->mainbin[MMPLAYER_M_PIPE].gst), \
                        GST_DEBUG_GRAPH_SHOW_ALL, x_name); \
                } \
        } while (0)
                } \
        } while (0)
 
+/* create element */
+#define MMPLAYER_CREATE_ELEMENT(x_bin, x_id, x_factory, x_name, x_bucket, x_player) \
+       do {\
+               x_bin[x_id].id = x_id;\
+               x_bin[x_id].gst = gst_element_factory_make(x_factory, x_name);\
+               if (!x_bin[x_id].gst) {\
+                       LOGE("failed to create %s", x_factory);\
+                       goto ERROR;\
+               } else {\
+                       if (x_player->ini.set_dump_element_flag)\
+                               __mmplayer_add_dump_buffer_probe(x_player, x_bin[x_id].gst);\
+               } \
+               x_bucket = g_list_append(x_bucket, &x_bin[x_id]);\
+       } while (0);
+
 /* release element resource */
 #define MMPLAYER_RELEASE_ELEMENT(x_player, x_bin, x_id) \
        do { \
 #define MMPLAYER_CURRENT_STATE(x_player) ((mmplayer_t *)x_player)->state
 #define MMPLAYER_PENDING_STATE(x_player) ((mmplayer_t *)x_player)->pending_state
 #define MMPLAYER_TARGET_STATE(x_player) ((mmplayer_t *)x_player)->target_state
-#define MMPLAYER_STATE_GET_NAME(state) __get_state_name(state)
+#define MMPLAYER_STATE_GET_NAME(state) _mmplayer_get_state_name(state)
 
 #define MMPLAYER_PRINT_STATE(x_player) \
        do { \
 #define MMPLAYER_STATE_CHANGE_TIMEOUT(x_player) ((mmplayer_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_HTTP_STREAMING(x_player) __is_http_streaming(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_IS_MS_BUFF_SRC(x_player) __is_ms_buff_src(x_player)
+#define MMPLAYER_IS_STREAMING(x_player) _mmplayer_is_streaming(x_player)
+#define MMPLAYER_IS_RTSP_STREAMING(x_player) _mmplayer_is_rtsp_streaming(x_player)
+#define MMPLAYER_IS_HTTP_STREAMING(x_player) _mmplayer_is_http_streaming(x_player)
+#define MMPLAYER_IS_HTTP_LIVE_STREAMING(x_player) _mmplayer_is_http_live_streaming(x_player)
+#define MMPLAYER_IS_LIVE_STREAMING(x_player) _mmplayer_is_live_streaming(x_player)
+#define MMPLAYER_IS_DASH_STREAMING(x_player) _mmplayer_is_dash_streaming(x_player)
+#define MMPLAYER_IS_SMOOTH_STREAMING(x_player) _mmplayer_is_smooth_streaming(x_player)
+#define MMPLAYER_IS_ADAPTIVE_STREAMING(x_player) _mmplayer_is_adaptive_streaming(x_player)
+#define MMPLAYER_IS_MS_BUFF_SRC(x_player) _mmplayer_is_ms_buff_src(x_player)
+
+#define MMPLAYER_URL_HAS_DASH_SUFFIX(x_player) _mmplayer_has_suffix(x_player, ".mpd")
+#define MMPLAYER_URL_HAS_HLS_SUFFIX(x_player) _mmplayer_has_suffix(x_player, ".m3u8")
 
-#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")
+#define MMPLAYER_STREAM_TYPE_GET_NAME(type) _mmplayer_get_stream_type_name(type)
 
-#define MMPLAYER_STREAM_TYPE_GET_NAME(type) __get_stream_type_name(type)
+#define MMPLAYER_USE_DECODEBIN(x_player) _mmplayer_use_decodebin(x_player)
 
 /*===========================================================================================
 |                                                                                                                                                                                      |
 |                                                                                                                                                                                      |
 ========================================================================================== */
 
-const gchar *__get_state_name(int state);
-const gchar *__get_stream_type_name(int type);
-
-gboolean __is_streaming(mmplayer_t *player);
-gboolean __is_rtsp_streaming(mmplayer_t *player);
-gboolean __is_live_streaming(mmplayer_t *player);
-gboolean __is_http_streaming(mmplayer_t *player);
-gboolean __is_http_live_streaming(mmplayer_t *player);
-gboolean __is_dash_streaming(mmplayer_t *player);
-gboolean __is_smooth_streaming(mmplayer_t *player);
-gboolean __is_ms_buff_src(mmplayer_t *player);
-gboolean __has_suffix(mmplayer_t *player, const gchar *suffix);
-
-gboolean __mmplayer_post_message(mmplayer_t *player, enum MMMessageType msgtype, MMMessageParamType *param);
-gboolean __mmplayer_dump_pipeline_state(mmplayer_t *player);
-
-bool util_is_sdp_file(const char *path);
-int util_exist_file_path(const char *file_path);
-char **util_get_cookie_list(const char *cookies);
-const char *util_get_charset(const char *file_path);
-int util_get_pixtype(unsigned int fourcc);
-bool util_get_storage_info(const char *path, mmplayer_storage_info_t *storage_info);
-
-media_format_mimetype_e util_convert_audio_pcm_str_to_media_format_mime(const gchar *audio_pcm_str);
+const gchar *_mmplayer_get_state_name(int state);
+const gchar *_mmplayer_get_stream_type_name(int type);
+
+gboolean _mmplayer_is_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_rtsp_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_live_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_http_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_http_live_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_dash_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_smooth_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_adaptive_streaming(mmplayer_t *player);
+gboolean _mmplayer_is_ms_buff_src(mmplayer_t *player);
+gboolean _mmplayer_has_suffix(mmplayer_t *player, const gchar *suffix);
+gboolean _mmplayer_is_videosink_ready(mmplayer_t *player, int surface_type);
+gboolean _mmplayer_use_decodebin(mmplayer_t *player);
+
+gboolean _mmplayer_post_message(mmplayer_t *player, enum MMMessageType msgtype, MMMessageParamType *param);
+gboolean _mmplayer_dump_pipeline_state(mmplayer_t *player);
+
+bool _mmplayer_is_sdp_file(const char *path);
+int _mmplayer_exist_file_path(const char *file_path);
+char **_mmplayer_get_cookie_list(const char *cookies);
+const char *_mmplayer_get_charset(const char *file_path);
+int _mmplayer_get_pixtype(unsigned int fourcc);
+bool _mmplayer_get_storage_info(const char *path, mmplayer_storage_info_t *storage_info);
+
+/* for command lock */
+void _mmplayer_cmd_lock_init(mmplayer_t *player);
+void _mmplayer_cmd_lock_deinit(mmplayer_t *player);
+void _mmplayer_cmd_lock(mmplayer_t *player);
+gboolean _mmplayer_cmd_trylock(mmplayer_t *player);
+void _mmplayer_cmd_unlock(mmplayer_t *player);
+media_format_mimetype_e _mmplayer_convert_audio_pcm_str_to_media_format_mime(const gchar *audio_pcm_str);
 
 #ifdef __cplusplus
        }