*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#include <gst/check/gstcheck.h>
#define NEW_LIST_FIXED(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
- list = gst_tag_list_new_empty (); \
+ if (list) gst_tag_list_unref (list); \
+ list = gst_tag_list_new_empty (); \
gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \
FTAG, FIXED3, FTAG, FIXED4, NULL); \
mark_point(); \
#define NEW_LIST_UNFIXED(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
- list = gst_tag_list_new_empty (); \
+ if (list) gst_tag_list_unref (list); \
+ list = gst_tag_list_new_empty (); \
gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \
UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \
mark_point(); \
#define NEW_LISTS_FIXED(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
- list = gst_tag_list_new_empty (); \
+ if (list) gst_tag_list_unref (list); \
+ list = gst_tag_list_new_empty (); \
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \
FTAG, FIXED2, NULL); \
- if (list2) gst_tag_list_free (list2); \
- list2 = gst_tag_list_new_empty (); \
+ if (list2) gst_tag_list_unref (list2); \
+ list2 = gst_tag_list_new_empty (); \
gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \
FTAG, FIXED4, NULL); \
- if (merge) gst_tag_list_free (merge); \
+ if (merge) gst_tag_list_unref (merge); \
merge = gst_tag_list_merge (list, list2, mode); \
mark_point(); \
} G_STMT_END;
#define NEW_LISTS_UNFIXED(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
- list = gst_tag_list_new_empty (); \
+ if (list) gst_tag_list_unref (list); \
+ list = gst_tag_list_new_empty (); \
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, UTAG, UNFIXED1, \
UTAG, UNFIXED2, NULL); \
- if (list2) gst_tag_list_free (list2); \
- list2 = gst_tag_list_new_empty (); \
+ if (list2) gst_tag_list_unref (list2); \
+ list2 = gst_tag_list_new_empty (); \
gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, UTAG, UNFIXED3,\
UTAG, UNFIXED4, NULL); \
- if (merge) gst_tag_list_free (merge); \
+ if (merge) gst_tag_list_unref (merge); \
merge = gst_tag_list_merge (list, list2, mode); \
mark_point(); \
} G_STMT_END;
#define NEW_LISTS_EMPTY1(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
+ if (list) gst_tag_list_unref (list); \
list = NULL; \
- if (list2) gst_tag_list_free (list2); \
- list2 = gst_tag_list_new_empty (); \
+ if (list2) gst_tag_list_unref (list2); \
+ list2 = gst_tag_list_new_empty (); \
gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \
FTAG, FIXED4, NULL); \
- if (merge) gst_tag_list_free (merge); \
+ if (merge) gst_tag_list_unref (merge); \
merge = gst_tag_list_merge (list, list2, mode); \
mark_point(); \
} G_STMT_END;
-#define NEW_LISTS_EMPTY2(mode) \
+#define NEW_LISTS_EMPTY2(mode) \
G_STMT_START { \
- if (list) gst_tag_list_free (list); \
- list = gst_tag_list_new_empty (); \
+ if (list) gst_tag_list_unref (list); \
+ list = gst_tag_list_new_empty (); \
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \
FTAG, FIXED2, NULL); \
- if (list2) gst_tag_list_free (list2); \
+ if (list2) gst_tag_list_unref (list2); \
list2 = NULL; \
- if (merge) gst_tag_list_free (merge); \
+ if (merge) gst_tag_list_unref (merge); \
merge = gst_tag_list_merge (list, list2, mode); \
mark_point(); \
} G_STMT_END;
/* clean up */
if (list)
- gst_tag_list_free (list);
+ gst_tag_list_unref (list);
}
GST_END_TEST
/* clean up */
if (list)
- gst_tag_list_free (list);
+ gst_tag_list_unref (list);
if (list2)
- gst_tag_list_free (list2);
+ gst_tag_list_unref (list2);
if (merge)
- gst_tag_list_free (merge);
+ gst_tag_list_unref (merge);
}
GST_END_TEST
fail_if (tag_list2 == NULL);
fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2));
fail_unless (gst_tag_list_is_equal (tag_list2, tag_list));
- gst_tag_list_free (tag_list2);
+ gst_tag_list_unref (tag_list2);
g_free (str);
fail_if (g_date_compare (date, date2) != 0);
fail_if (g_date_get_year (date2) != 2005);
g_date_free (date2);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
g_date_free (date);
}
taglist = gst_tag_list_new_empty ();
fail_unless (GST_IS_TAG_LIST (taglist));
- fail_unless (gst_is_tag_list (taglist));
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
- /* this isn't okay */
- ASSERT_CRITICAL (fail_if (gst_is_tag_list (NULL)));
-
- /* this however should be fine */
+ /* this should be fine */
fail_if (GST_IS_TAG_LIST (NULL));
/* check gst_tag_list_is_empty */
fail_unless (gst_tag_list_is_empty (taglist));
gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "JD", NULL);
fail_if (gst_tag_list_is_empty (taglist));
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
}
GST_END_TEST;
/* That string field with a non-UTF8 string should not have been added */
fail_unless (gst_tag_list_is_empty (taglist));
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
}
GST_END_TEST;
{
GstTagList *tags;
GstBuffer *buf1, *buf2;
+ GstSample *s1, *s2;
tags = gst_tag_list_new_empty ();
+
buf1 = gst_buffer_new_and_alloc (222);
- buf2 = gst_buffer_new_and_alloc (100);
- gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, buf1,
- GST_TAG_PREVIEW_IMAGE, buf2, NULL);
+ s1 = gst_sample_new (buf1, NULL, NULL, NULL);
gst_buffer_unref (buf1);
- gst_buffer_unref (buf2);
- buf1 = buf2 = NULL;
- fail_if (!gst_tag_list_get_buffer (tags, GST_TAG_IMAGE, &buf1));
- gst_buffer_unref (buf1);
- fail_if (!gst_tag_list_get_buffer (tags, GST_TAG_PREVIEW_IMAGE, &buf2));
+ buf2 = gst_buffer_new_and_alloc (100);
+ s2 = gst_sample_new (buf2, NULL, NULL, NULL);
gst_buffer_unref (buf2);
- fail_if (gst_tag_list_get_buffer_index (tags, GST_TAG_IMAGE, 1, &buf1));
- fail_if (gst_tag_list_get_buffer_index (tags, GST_TAG_IMAGE, 2, &buf1));
- fail_if (gst_tag_list_get_buffer_index (tags, GST_TAG_PREVIEW_IMAGE, 1,
- &buf1));
- fail_if (gst_tag_list_get_buffer_index (tags, GST_TAG_PREVIEW_IMAGE, 2,
- &buf1));
-
- fail_if (!gst_tag_list_get_buffer_index (tags, GST_TAG_IMAGE, 0, &buf1));
- fail_if (!gst_tag_list_get_buffer_index (tags, GST_TAG_PREVIEW_IMAGE, 0,
- &buf2));
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, s1,
+ GST_TAG_PREVIEW_IMAGE, s2, NULL);
+
+ gst_sample_unref (s1);
+ gst_sample_unref (s2);
+ s1 = s2 = NULL;
+
+ fail_if (!gst_tag_list_get_sample (tags, GST_TAG_IMAGE, &s1));
+ fail_unless (gst_sample_get_buffer (s1) == buf1);
+ gst_sample_unref (s1);
+
+ fail_if (!gst_tag_list_get_sample (tags, GST_TAG_PREVIEW_IMAGE, &s2));
+ fail_unless (gst_sample_get_buffer (s2) == buf2);
+ gst_sample_unref (s2);
+
+ fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 1, &s1));
+ gst_sample_unref (s1);
+ fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 2, &s1));
+ gst_sample_unref (s1);
+ fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 1, &s1));
+ gst_sample_unref (s1);
+ fail_if (gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 2, &s1));
+ gst_sample_unref (s1);
+
+ fail_if (!gst_tag_list_get_sample_index (tags, GST_TAG_IMAGE, 0, &s1));
+ fail_if (!gst_tag_list_get_sample_index (tags, GST_TAG_PREVIEW_IMAGE, 0,
+ &s2));
+ buf1 = gst_sample_get_buffer (s1);
fail_unless_equals_int (gst_buffer_get_size (buf1), 222);
+ buf2 = gst_sample_get_buffer (s2);
fail_unless_equals_int (gst_buffer_get_size (buf2), 100);
- gst_buffer_unref (buf1);
- gst_buffer_unref (buf2);
+ gst_sample_unref (s1);
+ gst_sample_unref (s2);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
GST_END_TEST;
ASSERT_WARNING (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND,
GST_TAG_ARTIST, "", NULL));
gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "xyz", NULL);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
GST_END_TEST;
fail_unless_equals_float (track_gain, 4.242);
fail_unless (tags != NULL);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
g_free (artist);
g_free (title);
}
fail_unless (strstr (artists, "Bar") != NULL);
fail_unless (strstr (artists, "Yay") != NULL);
g_free (artists);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
GST_END_TEST;
GST_START_TEST (test_equal)
{
GstTagList *tags, *tags2;
+ GstSample *sample1, *sample2, *sample11;
+ GstBuffer *buf;
tags = gst_tag_list_new_empty ();
gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL);
9.87654310, NULL);
fail_unless (!gst_tag_list_is_equal (tags2, tags));
- gst_tag_list_free (tags);
- gst_tag_list_free (tags2);
+ gst_tag_list_unref (tags);
+ gst_tag_list_unref (tags2);
+
+ /* samples */
+ buf = gst_buffer_new_wrapped (g_strdup ("test 1-2-3"), 10);
+ sample1 = gst_sample_new (buf, NULL, NULL, NULL);
+ gst_buffer_unref (buf);
+
+ buf = gst_buffer_new_wrapped (g_strdup ("test 1-2-3"), 10);
+ sample11 = gst_sample_new (buf, NULL, NULL, NULL);
+ gst_buffer_unref (buf);
+
+ buf = gst_buffer_new_wrapped (g_strdup ("test 2-3-4-5"), 12);
+ sample2 = gst_sample_new (buf, NULL, NULL, NULL);
+ gst_buffer_unref (buf);
+
+ tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample1, NULL);
+
+ tags2 = gst_tag_list_new_empty ();
+ fail_unless (!gst_tag_list_is_equal (tags2, tags));
+
+ /* sample sample, should be very equal now */
+ gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample1, NULL);
+ fail_unless (gst_tag_list_is_equal (tags2, tags));
+ gst_tag_list_unref (tags2);
+
+ /* same buffer content, but different buffer instances, still rather equal */
+ tags2 = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample11, NULL);
+ fail_unless (gst_tag_list_is_equal (tags2, tags));
+ gst_tag_list_unref (tags2);
+
+ /* different buffer content, should not be equal */
+ tags2 = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags2, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, sample2, NULL);
+ fail_unless (!gst_tag_list_is_equal (tags2, tags));
+ gst_tag_list_unref (tags2);
+
+ gst_tag_list_unref (tags);
+
+ gst_sample_unref (sample1);
+ gst_sample_unref (sample11);
+ gst_sample_unref (sample2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_writability)
+{
+ GstTagList *tags, *wtags;
+
+ tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL);
+
+ /* take ref, should no longer be writable */
+ gst_tag_list_ref (tags);
+ ASSERT_CRITICAL (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND,
+ GST_TAG_ARTIST, "Bar", NULL));
+
+ wtags = gst_tag_list_make_writable (tags);
+ /* should be ok now */
+ gst_tag_list_add (wtags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL);
+ gst_tag_list_unref (wtags);
+
+ /* this too, since we dropped the second ref in make_writable */
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL);
+ gst_tag_list_unref (tags);
+}
+
+GST_END_TEST;
+
+/* this tests GstSample serialisation/deserialisation, esp. with multiple
+ * samples in a tag list */
+GST_START_TEST (test_serialization)
+{
+ GstTagList *tags, *tags2;
+ GstBuffer *b1, *b2;
+ GstSample *s1, *s2;
+ GstCaps *c2;
+ gchar *s;
+
+ b1 = gst_buffer_new_allocate (NULL, 1, NULL);
+ gst_buffer_memset (b1, 0, 0xb3, -1);
+ s1 = gst_sample_new (b1, NULL, NULL, NULL);
+ gst_buffer_unref (b1);
+
+ b2 = gst_buffer_new_allocate (NULL, 8, NULL);
+ gst_buffer_memset (b2, 0, 0x2f, -1);
+ c2 = gst_caps_new_empty_simple ("foo/bar");
+ s2 = gst_sample_new (b2, c2, NULL, NULL);
+ gst_buffer_unref (b2);
+ gst_caps_unref (c2);
+ c2 = NULL;
+
+ tags = gst_tag_list_new (GST_TAG_ATTACHMENT, s1, NULL);
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ATTACHMENT, s2, NULL);
+ GST_INFO ("tags: %" GST_PTR_FORMAT, tags);
+
+ s = gst_tag_list_to_string (tags);
+ GST_INFO ("taglist -> string: %s", s);
+ tags2 = gst_tag_list_new_from_string (s);
+ GST_INFO ("string -> taglist: %" GST_PTR_FORMAT, tags2);
+ fail_unless (gst_tag_list_is_equal (tags, tags2));
+ gst_tag_list_unref (tags2);
+ g_free (s);
+
+ gst_sample_unref (s1);
+ gst_sample_unref (s2);
+ gst_tag_list_unref (tags);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_empty_taglist_serialization)
+{
+ GstTagList *taglist, *taglist2;
+ gchar *str;
+
+ taglist = gst_tag_list_new_empty ();
+ str = gst_tag_list_to_string (taglist);
+ taglist2 = gst_tag_list_new_from_string (str);
+ fail_if (taglist2 == NULL);
+ fail_unless (gst_tag_list_is_equal (taglist, taglist2));
+
+ gst_tag_list_unref (taglist);
+ gst_tag_list_unref (taglist2);
+ g_free (str);
}
GST_END_TEST;
+
static Suite *
gst_tag_suite (void)
{
tcase_add_test (tc_chain, test_empty_tags);
tcase_add_test (tc_chain, test_new_full);
tcase_add_test (tc_chain, test_equal);
+ tcase_add_test (tc_chain, test_writability);
+ tcase_add_test (tc_chain, test_serialization);
+ tcase_add_test (tc_chain, test_empty_taglist_serialization);
return s;
}