summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--gst/avi/gstavimux.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/gst/avi/gstavimux.c b/gst/avi/gstavimux.c
index 573de47..1e699c8 100644
--- a/gst/avi/gstavimux.c
+++ b/gst/avi/gstavimux.c
@@ -1112,18 +1112,32 @@ gst_avi_mux_write_tag (const GstTagList * list, const gchar * tag,
0, NULL}
};
gint n;
- gchar *str;
+ gchar *str = NULL;
GstByteWriter *bw = data;
guint chunk;
for (n = 0; rifftags[n].fcc != 0; n++) {
- if (!strcmp (rifftags[n].tag, tag) &&
- gst_tag_list_get_string (list, tag, &str) && str) {
- chunk = gst_avi_mux_start_chunk (bw, NULL, rifftags[n].fcc);
- gst_byte_writer_put_string (bw, str);
- gst_avi_mux_end_chunk (bw, chunk);
- g_free (str);
- break;
+ if (!strcmp (rifftags[n].tag, tag)) {
+ if (rifftags[n].fcc == GST_RIFF_INFO_ICRD) {
+ GDate *date;
+ /* special case for the date tag */
+ if (gst_tag_list_get_date (list, tag, &date)) {
+ str =
+ g_strdup_printf ("%04d:%02d:%02d", g_date_get_year (date),
+ g_date_get_month (date), g_date_get_day (date));
+ g_date_free (date);
+ }
+ } else {
+ gst_tag_list_get_string (list, tag, &str);
+ }
+ if (str) {
+ chunk = gst_avi_mux_start_chunk (bw, NULL, rifftags[n].fcc);
+ gst_byte_writer_put_string (bw, str);
+ gst_avi_mux_end_chunk (bw, chunk);
+ g_free (str);
+ str = NULL;
+ break;
+ }
}
}
}