g_string_free (subparse->textbuf, TRUE);
subparse->textbuf = NULL;
}
-
#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
g_free (subparse->state.current_language);
subparse->state.current_language = NULL;
#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
g_object_class_install_property (object_class, PROP_EXTSUB_CURRENT_LANGUAGE,
g_param_spec_string ("current-language", "Current language",
- "Current language of the subtitle in external subtitle case.",
- DEFAULT_CURRENT_LANGUAGE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ "Current language of the subtitle in external subtitle case.",
+ DEFAULT_CURRENT_LANGUAGE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
#endif
}
}
#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
case PROP_EXTSUB_CURRENT_LANGUAGE:
- g_free(subparse->state.current_language);
+ g_free (subparse->state.current_language);
subparse->state.current_language = g_value_dup_string (value);
GST_LOG_OBJECT (subparse, "subtitle current language set to %s",
- GST_STR_NULL (subparse->state.current_language));
- sami_context_change_language(&subparse->state);
+ GST_STR_NULL (subparse->state.current_language));
+ sami_context_change_language (&subparse->state);
break;
#endif
default:
}
}
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+static void
+send_timestamp_map_event (GstSubParse * self)
+{
+ GstClockTime local = 0;
+ guint64 mpegts = 0;
+ GstEvent *event = NULL;
+ gchar *local_start = NULL;
+ gchar *mpegts_start = NULL;
+
+ if (!self->state.timestamp_map)
+ return;
+
+ local_start = g_strrstr (self->state.timestamp_map, "LOCAL:");
+ if (local_start)
+ parse_subrip_time (local_start + strlen ("LOCAL:"), &local);
+
+ mpegts_start = g_strrstr (self->state.timestamp_map, "MPEGTS:");
+ if (mpegts_start)
+ mpegts = g_ascii_strtoull (mpegts_start + strlen ("MPEGTS:"), NULL, 10);
+
+ g_free (self->state.timestamp_map);
+ self->state.timestamp_map = NULL;
+
+ GST_LOG ("parsed local time %" GST_TIME_FORMAT " MPEGTS: %" G_GUINT64_FORMAT,
+ GST_TIME_ARGS (local), mpegts);
+
+ event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+ gst_structure_new ("timestamp_map",
+ "local", G_TYPE_UINT64, local,
+ "mpegts", G_TYPE_UINT64, mpegts, NULL));
+ gst_pad_push_event (self->srcpad, event);
+}
+#endif
+
static gchar *
parse_subrip (ParserState * state, const gchar * line)
{
state->start_time = ts_start;
state->duration = ts_end - ts_start;
cue_settings = strstr (end_time + strlen (" --> "), " ");
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+ } else if (strstr (line, "X-TIMESTAMP-MAP")) {
+ g_free (state->timestamp_map);
+ state->timestamp_map = g_strdup (line);
+ GST_DEBUG ("got X-TIMESTAMP-MAP '%s'", line);
+ state->state = 0;
+#endif
} else {
GST_DEBUG ("error parsing subrip time line '%s'", line);
state->state = 0;
#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
state->language_list = NULL;
- g_free(state->current_language);
+ g_free (state->current_language);
state->current_language = NULL;
state->langlist_msg_posted = FALSE;
GST_LOG_OBJECT (self, "State %d. Parsing line '%s'", self->state.state,
line + offset);
subtitle = self->parse_line (&self->state, line + offset);
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+ if (self->parser_type == GST_SUB_PARSE_FORMAT_VTT)
+ send_timestamp_map_event (self);
+#endif
g_free (line);
#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
if (!self->state.langlist_msg_posted && self->state.language_list) {
- m = gst_message_new_element (GST_OBJECT_CAST (self), gst_structure_new("Ext_Sub_Language_List",
- "lang_list", G_TYPE_POINTER, self->state.language_list, NULL));
+ m = gst_message_new_element (GST_OBJECT_CAST (self),
+ gst_structure_new ("Ext_Sub_Language_List", "lang_list",
+ G_TYPE_POINTER, self->state.language_list, NULL));
gst_element_post_message (GST_ELEMENT_CAST (self), m);
self->state.langlist_msg_posted = TRUE;
- GST_DEBUG_OBJECT (self, "curr lang as : %s ", GST_STR_NULL(self->state.current_language));
+ GST_DEBUG_OBJECT (self, "curr lang as : %s ",
+ GST_STR_NULL (self->state.current_language));
}
#endif
if (subtitle) {