}
break;
- case GST_MESSAGE_DURATION:
+ case GST_MESSAGE_DURATION_CHANGED:
{
- debug_log("GST_MESSAGE_DURATION\n");
+ debug_log("GST_MESSAGE_DURATION_CHANGED\n");
ret = __mmplayer_gst_handle_duration(player, msg);
if (!ret)
{
static gboolean
__mmplayer_gst_handle_duration(mm_player_t* player, GstMessage* msg)
{
- GstFormat format;
gint64 bytes = 0;
MMPLAYER_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 )
+ if ((MMPLAYER_IS_HTTP_STREAMING(player)) &&
+ (msg->src) && (msg->src == (GstObject *)player->pipeline->mainbin[MMPLAYER_M_SRC].gst))
{
- debug_log("data total size of http content: %lld", bytes);
- player->http_content_size = bytes;
+ debug_log("msg src : [%s]", GST_ELEMENT_NAME(GST_ELEMENT_CAST(msg->src)));
+
+ if (gst_element_query_duration(GST_ELEMENT_CAST(msg->src), GST_FORMAT_BYTES, &bytes))
+ {
+ debug_log("data total size of http content: %lld", bytes);
+ player->http_content_size = bytes;
+ }
}
- else if (format == GST_FORMAT_TIME)
+ else
{
/* 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;
- }
MMPLAYER_FLEAVE();
case GST_MESSAGE_CLOCK_LOST:
case GST_MESSAGE_NEW_CLOCK:
case GST_MESSAGE_ELEMENT:
- case GST_MESSAGE_DURATION:
+ case GST_MESSAGE_DURATION_CHANGED:
case GST_MESSAGE_ASYNC_START:
retval = TRUE;
break;
#endif
break;
- case GST_MESSAGE_DURATION:
+ case GST_MESSAGE_DURATION_CHANGED:
__mmplayer_gst_handle_duration(player, message);
break;
case GST_MESSAGE_ASYNC_DONE:
{
debug_log("sending event[%s] to sink element [%s] success!\n",
GST_EVENT_TYPE_NAME(event), GST_ELEMENT_NAME(sink) );
-
- /* rtsp case, asyn_done is not called after seek during pause state */
- if (MMPLAYER_IS_RTSP_STREAMING(player))
- {
- if (strstr(GST_EVENT_TYPE_NAME(event), "seek"))
- {
- if (MMPLAYER_TARGET_STATE(player) == MM_PLAYER_STATE_PAUSED)
- {
- debug_log("RTSP seek completed, after pause state..\n");
- player->doing_seek = FALSE;
- MMPLAYER_POST_MSG ( player, MM_MESSAGE_SEEK_COMPLETED, NULL );
- }
-
- }
- }
-
#ifdef TEST_ES
if( MMPLAYER_IS_ES_BUFF_SRC(player))
{