summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
m---------common0
-rw-r--r--gst/id3demux/gstid3demux.c32
-rw-r--r--gst/id3demux/id3tags.c2
4 files changed, 39 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ad73556..6d68ced0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2006-01-31 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/id3demux/gstid3demux.c: (gst_id3demux_chain),
+ (gst_id3demux_read_id3v1), (gst_id3demux_sink_activate),
+ (gst_id3demux_send_tag_event):
+ * gst/id3demux/id3tags.c: (id3demux_read_id3v1_tag):
+ Someone should kick my butt. Remove ID3v1 tags from the end of the
+ file.
+
+ Improve error messages. Send the TAG message as soon as we complete
+ typefinding, instead of waiting until we send the first buffer.
+ Downstream tag event is still sent before the first buffer.
+
2006-01-27 Jan Gerber <j@bootlab.org>
Reviewed by: Andy Wingo <wingo@pobox.com>
diff --git a/common b/common
-Subproject bc4325349e8d0ec90aa5c5e74566880cc2e8252
+Subproject 0b93085188e83fe678ec5ded2823cd7c24dfa84
diff --git a/gst/id3demux/gstid3demux.c b/gst/id3demux/gstid3demux.c
index 10dfcf29..8b37ff86 100644
--- a/gst/id3demux/gstid3demux.c
+++ b/gst/id3demux/gstid3demux.c
@@ -453,7 +453,9 @@ gst_id3demux_chain (GstPad * pad, GstBuffer * buf)
}
/* We failed typefind */
- GST_ELEMENT_ERROR (id3demux, CORE, CAPS, (NULL), ("no caps found"));
+ GST_ELEMENT_ERROR (id3demux, CORE, CAPS,
+ ("Could not determine the mime type of the file"),
+ ("No caps found for contents within an ID3 tag"));
gst_buffer_unref (typefind_buf);
gst_buffer_unref (id3demux->collect);
id3demux->collect = NULL;
@@ -471,6 +473,14 @@ gst_id3demux_chain (GstPad * pad, GstBuffer * buf)
/* Move onto streaming and fall-through to push out existing
* data */
id3demux->state = GST_ID3DEMUX_STREAMING;
+
+ /* Now that typefinding is complete, post the
+ * tags message */
+ if (id3demux->parsed_tags != NULL) {
+ gst_element_post_message (GST_ELEMENT (id3demux),
+ gst_message_new_tag (GST_OBJECT (id3demux),
+ gst_tag_list_copy (id3demux->parsed_tags)));
+ }
/* fall-through */
}
case GST_ID3DEMUX_STREAMING:{
@@ -675,7 +685,9 @@ gst_id3demux_read_id3v1 (GstID3Demux * id3demux, GstTagList ** tags)
tag_res = id3demux_read_id3v1_tag (buffer, &id3demux->strip_end, tags);
if (tag_res == ID3TAGS_READ_TAG) {
- GST_DEBUG_OBJECT (id3demux, "Read ID3v1 tag");
+ GST_DEBUG_OBJECT (id3demux,
+ "Read ID3v1 tag - trimming %d bytes from end of file",
+ id3demux->strip_end);
res = TRUE;
} else if (tag_res == ID3TAGS_BROKEN_TAG) {
GST_WARNING_OBJECT (id3demux, "Ignoring broken ID3v1 tag");
@@ -828,10 +840,19 @@ gst_id3demux_sink_activate (GstPad * sinkpad)
/* 5 - If we didn't find the caps, fail */
if (caps == NULL) {
- GST_DEBUG_OBJECT (id3demux, "Could not detect type of contents");
+ GST_ELEMENT_ERROR (id3demux, CORE, CAPS,
+ ("Could not determine the mime type of the file"),
+ ("No caps found for contents within an ID3 tag"));
goto done_activate;
}
+ /* Now that we've finished typefinding, post tag message on bus */
+ if (id3demux->parsed_tags != NULL) {
+ gst_element_post_message (GST_ELEMENT (id3demux),
+ gst_message_new_tag (GST_OBJECT (id3demux),
+ gst_tag_list_copy (id3demux->parsed_tags)));
+ }
+
/* tag reading and typefinding were already done, don't do them again in
the chain function if we end up in push mode */
id3demux->state = GST_ID3DEMUX_STREAMING;
@@ -1079,11 +1100,6 @@ gst_id3demux_send_tag_event (GstID3Demux * id3demux)
GstTagList *merged = gst_tag_list_merge (id3demux->event_tags,
id3demux->parsed_tags, GST_TAG_MERGE_KEEP);
- if (id3demux->parsed_tags)
- gst_element_post_message (GST_ELEMENT (id3demux),
- gst_message_new_tag (GST_OBJECT (id3demux),
- gst_tag_list_copy (id3demux->parsed_tags)));
-
if (merged) {
GstEvent *event = gst_event_new_tag (merged);
diff --git a/gst/id3demux/id3tags.c b/gst/id3demux/id3tags.c
index 12765e61..a14eccef 100644
--- a/gst/id3demux/id3tags.c
+++ b/gst/id3demux/id3tags.c
@@ -101,6 +101,8 @@ id3demux_read_id3v1_tag (GstBuffer * buffer, guint * id3v1_size,
} else
*tags = new_tags;
+ if (id3v1_size)
+ *id3v1_size = ID3V1_TAG_SIZE;
return ID3TAGS_READ_TAG;
}