static int __mmplayer_gst_set_state (mm_player_t* player, GstElement * pipeline, GstState state, gboolean async, gint timeout );
gboolean __mmplayer_post_message(mm_player_t* player, enum MMMessageType msgtype, MMMessageParamType* param);
static gboolean __mmplayer_gst_extract_tag_from_msg(mm_player_t* player, GstMessage *msg);
+static gboolean __mmplayer_gst_handle_duration(mm_player_t* player, GstMessage* msg);
+
int __mmplayer_switch_audio_sink (mm_player_t* player);
static gboolean __mmplayer_gst_remove_fakesink(mm_player_t* player, MMPlayerGstElement* fakesink);
static int __mmplayer_check_state(mm_player_t* player, enum PlayerCommandState command);
int state = MM_PLAYER_STATE_NONE;
debug_fenter();
-
+
return_val_if_fail ( player, MM_PLAYER_STATE_NONE );
state = MMPLAYER_CURRENT_STATE(player);
debug_log("player state is %s.\n", MMPLAYER_STATE_GET_NAME(state));
debug_fleave();
-
+
return state;
}
case GST_MESSAGE_DURATION:
{
debug_log("GST_MESSAGE_DURATION\n");
-
- GstFormat format;
- gint64 bytes = 0;
-
- gst_message_parse_duration (msg, &format, &bytes);
-
- if (MMPLAYER_IS_STREAMING(player) && format == GST_FORMAT_BYTES )
+ ret = __mmplayer_gst_handle_duration(player, msg);
+ if (!ret)
{
- if (format == GST_FORMAT_BYTES)
- {
- debug_log("data total size of http content: %lld", bytes);
- player->http_content_size = bytes;
- }
- } else {
- /* handling audio clip which has vbr. means duration is keep changing */
- if ( format == GST_FORMAT_TIME )
- {
- _mmplayer_update_content_attrs (player, ATTR_DURATION );
- }
+ debug_warning("failed to update duration");
}
}
+
break;
+
case GST_MESSAGE_LATENCY: debug_log("GST_MESSAGE_LATENCY\n"); break;
case GST_MESSAGE_ASYNC_START: debug_log("GST_MESSAGE_ASYNC_DONE : %s\n", gst_element_get_name(GST_MESSAGE_SRC(msg))); break;
return ret;
}
+static gboolean
+__mmplayer_gst_handle_duration(mm_player_t* player, GstMessage* msg)
+{
+ GstFormat format;
+ gint64 bytes = 0;
+
+ debug_fenter();
+
+ return_val_if_fail(player, FALSE);
+ return_val_if_fail(msg, FALSE);
+
+ gst_message_parse_duration (msg, &format, &bytes);
+
+ if (MMPLAYER_IS_HTTP_STREAMING(player) && format == GST_FORMAT_BYTES )
+ {
+ debug_log("data total size of http content: %lld", bytes);
+ player->http_content_size = bytes;
+ }
+ else if (format == GST_FORMAT_TIME)
+ {
+ /* handling audio clip which has vbr. means duration is keep changing */
+ _mmplayer_update_content_attrs (player, ATTR_DURATION );
+ }
+ else
+ {
+ debug_warning("duration is neither BYTES or TIME");
+ return FALSE;
+ }
+
+ debug_fleave();
+
+ return TRUE;
+}
+
+
static gboolean
__mmplayer_gst_extract_tag_from_msg(mm_player_t* player, GstMessage* msg) // @
{
/**
- * AUDIO PIPELINE
+ * AUDIO PIPELINE
* - Local playback : audioconvert !volume ! capsfilter ! audioeq ! audiosink
* - Streaming : audioconvert !volume ! audiosink
- * - PCM extraction : audioconvert ! audioresample ! capsfilter ! fakesink
+ * - PCM extraction : audioconvert ! audioresample ! capsfilter ! fakesink
*/
static int
__mmplayer_gst_create_audio_pipeline(mm_player_t* player)
if ( !subtitle_uri || strlen(subtitle_uri) < 1)
{
debug_error("subtitle uri is not proper filepath.\n");
- return MM_ERROR_PLAYER_INVALID_URI;
+ return MM_ERROR_PLAYER_INVALID_URI;
}
debug_log("subtitle file path is [%s].\n", subtitle_uri);
}
debug_fleave();
-
+
return MM_ERROR_NONE;
case GST_MESSAGE_TAG:
__mmplayer_gst_extract_tag_from_msg(player, message);
break;
+ case GST_MESSAGE_DURATION:
+ __mmplayer_gst_handle_duration(player, message);
+ break;
default:
return GST_BUS_PASS;
g_object_set(G_OBJECT(element), "location", player->pd_file_save_path, NULL);
}
-
+
player->streaming_type = STREAMING_SERVICE_NONE;
}
break;
timeout = MMPLAYER_STATE_CHANGE_TIMEOUT ( player );
if ( player->profile.uri_type == MM_PLAYER_URI_TYPE_BUFF || player->profile.uri_type == MM_PLAYER_URI_TYPE_HLS)
{
- ret = __mmplayer_gst_set_state(player,
+ ret = __mmplayer_gst_set_state(player,
player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, GST_STATE_READY, FALSE, timeout );
}
else
MMPLAYER_SET_STATE ( player, MM_PLAYER_STATE_PLAYING );
}
}
-
+
/* FIXIT : analyze so called "async problem" */
/* set async off */
__gst_set_async_state_change( player, FALSE );
if (strlen(path)) {
strcpy(data->uri, uri);
data->uri_type = MM_PLAYER_URI_TYPE_URL_HTTP;
-
+
ret = TRUE;
}
}
{
debug_fenter();
return_val_if_fail ( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
-
+
/* destroy can called at anytime */
if (player->pd_downloader && MMPLAYER_IS_HTTP_PD(player))
{
return_val_if_fail ( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
- debug_log("volume [L]=%f:[R]=%f\n",
+ debug_log("volume [L]=%f:[R]=%f\n",
volume.level[MM_VOLUME_CHANNEL_LEFT], volume.level[MM_VOLUME_CHANNEL_RIGHT]);
/* invalid factor range or not */
debug_log("buffer enough data cb Handle value is %p : %p\n", player, player->enough_data_cb);
debug_fleave();
-
+
return MM_ERROR_NONE;
}
gchar *name = NULL;
name = g_strdup(GST_ELEMENT_NAME( GST_PAD_PARENT ( srcpad )));
-
+
if (g_strrstr(name, "mpegtsdemux"))
{
gchar *demux_caps = NULL;
dcaps = gst_pad_get_caps(srcpad);
demux_caps = gst_caps_to_string(dcaps);
-
+
if (g_strrstr(demux_caps, "video/x-h264"))
{
parser_name = g_strdup("h264parse");
{
parser_name = g_strdup("mpeg4videoparse");
}
-
+
gst_caps_unref(dcaps);
MMPLAYER_FREEIF( demux_caps );
parser = __mmplayer_element_create_and_link(player, srcpad, parser_name);
MMPLAYER_FREEIF(parser_name);
-
+
if ( ! parser )
{
debug_error("failed to create parser\n");
gboolean res = FALSE;
debug_fenter();
-
+
return_val_if_fail( player, FALSE );
return_val_if_fail ( event, FALSE );