From: Thiago Santos Date: Thu, 22 Dec 2011 10:53:39 +0000 (-0300) Subject: tag: xmp: Keep compatibility with our old generated xmp X-Git-Tag: RELEASE-0.11.2~2^2~81 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=77353dad21203d3007d9588ae35ef818a0103fa8;p=platform%2Fupstream%2Fgst-plugins-base.git tag: xmp: Keep compatibility with our old generated xmp We used to add a trailing \n to the end of generated xmp packets. Windows viewer was unhappy with it and we fixed it in 96d2120c2bb0b29e1849098198f5fbef81939cdd The problem is that this caused xmp generated before this fix to not be recognized and parsed anymore. This patch makes it recognize xmp with the trailing \n and without, fixing the regression. Also adds tests for it. --- diff --git a/gst-libs/gst/tag/gstxmptag.c b/gst-libs/gst/tag/gstxmptag.c index abe3597..1fb7f39 100644 --- a/gst-libs/gst/tag/gstxmptag.c +++ b/gst-libs/gst/tag/gstxmptag.c @@ -1317,7 +1317,10 @@ gst_tag_list_from_xmp_buffer (const GstBuffer * buffer) if (*xp1 != '>') goto missing_header; - max_ft_len = 1 + strlen (""); + /* Use 2 here to count for an extra trailing \n that was added + * in old versions, this makes it able to parse xmp packets with + * and without this trailing char */ + max_ft_len = 2 + strlen (""); if (len < max_ft_len) goto missing_footer; diff --git a/tests/check/libs/tag.c b/tests/check/libs/tag.c index 17401c3..db59323 100644 --- a/tests/check/libs/tag.c +++ b/tests/check/libs/tag.c @@ -975,13 +975,21 @@ GST_START_TEST (test_xmp_parsing) { GstTagList *list; GstBuffer *buf; - guint i, result_size; + guint i, j, result_size; gchar *text; const gchar *xmp_header = "" "" ""; - const gchar *xmp_footer = "" "" ""; + + /* We used to write an extra trailing \n after the footer, keep compatibility + * with our old generated media by checking that it still can be parsed */ + const gchar *xmp_footers[] = { + "" "" "", + "" "" "\n", + NULL + }; + struct { const gchar *xmp_data; @@ -1003,36 +1011,40 @@ GST_START_TEST (test_xmp_parsing) /* test data */ buf = gst_buffer_new (); + j = 0; i = 0; - while (test_data[i].xmp_data) { - GST_DEBUG ("trying test-data %u", i); - - text = g_strconcat (xmp_header, test_data[i].xmp_data, xmp_footer, NULL); - GST_BUFFER_DATA (buf) = (guint8 *) text; - GST_BUFFER_SIZE (buf) = strlen (text) + 1; - - - list = gst_tag_list_from_xmp_buffer (buf); - if (test_data[i].result_size >= 0) { - fail_unless (list != NULL); - - result_size = gst_structure_n_fields ((GstStructure *) list); - fail_unless (result_size == test_data[i].result_size); - - /* check the taglist content */ - switch (test_data[i].result_test) { - case 0: - ASSERT_TAG_LIST_HAS_STRING (list, "description", "test"); - break; - default: - break; + while (xmp_footers[j]) { + while (test_data[i].xmp_data) { + GST_DEBUG ("trying test-data %u", i); + + text = + g_strconcat (xmp_header, test_data[i].xmp_data, xmp_footers[j], NULL); + GST_BUFFER_DATA (buf) = (guint8 *) text; + GST_BUFFER_SIZE (buf) = strlen (text) + 1; + + list = gst_tag_list_from_xmp_buffer (buf); + if (test_data[i].result_size >= 0) { + fail_unless (list != NULL); + + result_size = gst_structure_n_fields ((GstStructure *) list); + fail_unless (result_size == test_data[i].result_size); + + /* check the taglist content */ + switch (test_data[i].result_test) { + case 0: + ASSERT_TAG_LIST_HAS_STRING (list, "description", "test"); + break; + default: + break; + } } - } - if (list) - gst_tag_list_free (list); + if (list) + gst_tag_list_free (list); - g_free (text); - i++; + g_free (text); + i++; + } + j++; } gst_buffer_unref (buf);