GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+ demux->is_supported_format = TRUE;
+#endif
+
/* set initial state */
gst_asf_demux_reset (demux, FALSE);
}
* forever */
GST_PAD_STREAM_LOCK (demux->sinkpad);
- /* we now can stop flushing, since we have the stream lock now */
- fevent = gst_event_new_flush_stop (TRUE);
- gst_event_set_seqnum (fevent, seqnum);
- gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
-
- if (G_LIKELY (flush))
+ if (G_LIKELY (flush)) {
+ /* we now can stop flushing, since we have the stream lock now */
+ fevent = gst_event_new_flush_stop (TRUE);
+ gst_event_set_seqnum (fevent, seqnum);
+ gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
gst_asf_demux_send_event_unlocked (demux, fevent);
- else
- gst_event_unref (fevent);
+ }
/* operating on copy of segment until we know the seek worked */
segment = demux->segment;
- if (G_UNLIKELY (demux->segment_running && !flush)) {
- GstSegment newsegment;
- GstEvent *newseg;
-
- /* create the segment event to close the current segment */
- gst_segment_copy_into (&segment, &newsegment);
- newseg = gst_event_new_segment (&newsegment);
- gst_event_set_seqnum (newseg, seqnum);
-
- gst_asf_demux_send_event_unlocked (demux, newseg);
- }
-
gst_segment_do_seek (&segment, rate, format, flags, cur_type,
cur, stop_type, stop, &only_need_update);
"data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
demux->data_offset, demux->data_size, demux->index_offset);
-
+#ifdef TIZEN_FEATURE_ASFDEMUX_CHECK_DATA_SIZE
+ if (demux->data_size == 0) {
+ GST_WARNING_OBJECT (demux, "DATA object size is zero");
+ return FALSE;
+ }
+#endif
return TRUE;
}
/* there are some DVR ms files where first packet has TS of 0 (instead of -1) while subsequent packets have
regular (singificantly larger) timestamps. If we don't deal with it, we may end up with huge gap in timestamps
- which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues
+ which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues
from it. I havent found a better way to distinguish between these two, except to set an arbitrary boundary
and disregard the first 0 timestamp if the second timestamp is bigger than the boundary) */
src_pad = gst_pad_new_from_static_template (&audio_src_template, name);
g_free (name);
- /* Swallow up any left over data and set up the
+ /* Swallow up any left over data and set up the
* standard properties from the header info */
if (size_left) {
GST_INFO_OBJECT (demux, "Audio header contains %d bytes of "
++demux->num_audio_streams;
+#ifdef TIZEN_FEATURE_ASFDEMUX_POST_TAG_MSG
+ if (tags) {
+ /* post now, send event on pad later */
+ gst_element_post_message (GST_ELEMENT_CAST (demux),
+ gst_message_new_tag (GST_OBJECT_CAST (demux), gst_tag_list_copy (tags)));
+ }
+#endif
+
return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
}
streamheader = gst_buffer_ref (buf);
gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
gst_structure_remove_field (caps_s, "codec_data");
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING,
+ "byte-stream", NULL);
+ } else {
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "avc",
+ NULL);
}
gst_buffer_unmap (buf, &mapinfo);
}
+ } else {
+ gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "byte-stream",
+ NULL);
}
}
++demux->num_video_streams;
+#ifdef TIZEN_FEATURE_ASFDEMUX_POST_TAG_MSG
+ if (tags) {
+ /* post now, send event on pad later */
+ gst_element_post_message (GST_ELEMENT_CAST (demux),
+ gst_message_new_tag (GST_OBJECT_CAST (demux), gst_tag_list_copy (tags)));
+ }
+#endif
+
return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
streamheader, tags);
}
&data, &size)) {
goto not_enough_data;
}
-
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+ /* Compare video format WMV*, WVC* */
+ if (((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('M')<<8|('V')<<16))
+ || ((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('V')<<8|('C')<<16))) {
+ GST_ERROR_OBJECT (demux, "WMV file format is not supported.");
+ demux->is_supported_format = FALSE;
+ return NULL;
+ }
+#endif
stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
stream_id, &data, &size);
stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
g_free (stream_obj_data);
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+ if ((stream == NULL) && (demux->is_supported_format == FALSE)) {
+ g_free (esp.payload_extensions);
+ return GST_FLOW_NOT_SUPPORTED;
+ }
+#endif
+
done:
if (stream) {
switch (obj.id) {
case ASF_OBJ_STREAM:
gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+ if (demux->is_supported_format == FALSE) {
+ ret = GST_FLOW_NOT_SUPPORTED;
+ break;
+ }
+#endif
ret = GST_FLOW_OK;
break;
case ASF_OBJ_FILE: