| /* GStreamer RTP header extension unit tests | |
| * Copyright (C) 2020 Matthew Waters <matthew@centricular.com> | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Library General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Library General Public License for more details. | |
| * | |
| * 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., 51 Franklin St, Fifth Floor, | |
| * Boston, MA 02110-1301, USA. | |
| */ | |
| #include "gst/gstcaps.h" | |
| #include "gst/gstvalue.h" | |
| #include "gst/rtp/gstrtphdrext.h" | |
| #ifdef HAVE_CONFIG_H | |
| #include "config.h" | |
| #endif | |
| #include <gst/gst.h> | |
| #include <gst/check/check.h> | |
| #include <gst/rtp/rtp.h> | |
| #include "rtpdummyhdrextimpl.c" | |
| GST_START_TEST (rtp_header_ext_write) | |
| { | |
| GstRTPHeaderExtension *dummy; | |
| GstBuffer *buffer; | |
| guint8 *data; | |
| gsize size; | |
| gssize written; | |
| dummy = rtp_dummy_hdr_ext_new (); | |
| gst_rtp_header_extension_set_id (dummy, 1); | |
| buffer = gst_buffer_new (); | |
| size = gst_rtp_header_extension_get_max_size (dummy, buffer); | |
| fail_unless (size > 0); | |
| data = g_malloc0 (size); | |
| fail_unless (data != NULL); | |
| written = | |
| gst_rtp_header_extension_write (dummy, buffer, 0, buffer, data, size); | |
| fail_unless (written > 0 && written <= size); | |
| fail_unless_equals_int (GST_RTP_DUMMY_HDR_EXT (dummy)->write_count, 1); | |
| fail_unless (gst_rtp_header_extension_read (dummy, 0, data, size, buffer)); | |
| fail_unless_equals_int (GST_RTP_DUMMY_HDR_EXT (dummy)->read_count, 1); | |
| g_free (data); | |
| gst_buffer_unref (buffer); | |
| g_object_unref (dummy); | |
| } | |
| GST_END_TEST; | |
| GST_START_TEST (rtp_header_ext_create_from_uri) | |
| { | |
| GstElementFactory *factory; | |
| GstRTPHeaderExtension *dummy; | |
| fail_unless (gst_element_register (NULL, "test-dummyrtphdrext", | |
| GST_RANK_MARGINAL, GST_TYPE_RTP_DUMMY_HDR_EXT)); | |
| dummy = gst_rtp_header_extension_create_from_uri (DUMMY_HDR_EXT_URI); | |
| fail_unless (GST_IS_RTP_DUMMY_HDR_EXT (dummy)); | |
| factory = gst_element_get_factory (GST_ELEMENT (dummy)); | |
| gst_registry_remove_feature (gst_registry_get (), | |
| GST_PLUGIN_FEATURE (factory)); | |
| gst_object_unref (dummy); | |
| } | |
| GST_END_TEST; | |
| GST_START_TEST (rtp_header_ext_caps_with_attributes) | |
| { | |
| GstRTPHeaderExtension *dummy; | |
| GstCaps *caps = gst_caps_new_empty_simple ("application/x-rtp"); | |
| GstStructure *s = gst_caps_get_structure (caps, 0); | |
| const GValue *arr, *val; | |
| const gchar *attributes = "attr0 attr1"; | |
| const gchar *direction = "recvonly"; | |
| dummy = rtp_dummy_hdr_ext_new (); | |
| gst_rtp_header_extension_set_id (dummy, 1); | |
| gst_rtp_header_extension_set_direction (dummy, | |
| GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY); | |
| GST_RTP_DUMMY_HDR_EXT (dummy)->attributes = g_strdup (attributes); | |
| fail_unless (gst_rtp_header_extension_set_caps_from_attributes (dummy, caps)); | |
| fail_unless (gst_structure_has_field_typed (s, "extmap-1", GST_TYPE_ARRAY)); | |
| arr = gst_structure_get_value (s, "extmap-1"); | |
| fail_unless (GST_VALUE_HOLDS_ARRAY (arr)); | |
| fail_unless_equals_int (gst_value_array_get_size (arr), 3); | |
| val = gst_value_array_get_value (arr, 0); | |
| fail_unless_equals_string (g_value_get_string (val), direction); | |
| val = gst_value_array_get_value (arr, 1); | |
| fail_unless_equals_string (g_value_get_string (val), | |
| gst_rtp_header_extension_get_uri (dummy)); | |
| val = gst_value_array_get_value (arr, 2); | |
| fail_unless_equals_string (g_value_get_string (val), attributes); | |
| gst_rtp_header_extension_set_direction (dummy, | |
| GST_RTP_HEADER_EXTENSION_DIRECTION_SENDRECV | | |
| GST_RTP_HEADER_EXTENSION_DIRECTION_INHERITED); | |
| g_free (GST_RTP_DUMMY_HDR_EXT (dummy)->attributes); | |
| GST_RTP_DUMMY_HDR_EXT (dummy)->attributes = NULL; | |
| fail_unless (gst_rtp_header_extension_set_attributes_from_caps (dummy, caps)); | |
| fail_unless_equals_string (GST_RTP_DUMMY_HDR_EXT (dummy)->attributes, | |
| attributes); | |
| fail_unless_equals_int (gst_rtp_header_extension_get_direction (dummy), | |
| GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY); | |
| gst_caps_unref (caps); | |
| gst_object_unref (dummy); | |
| } | |
| GST_END_TEST; | |
| static Suite * | |
| rtp_header_extension_suite (void) | |
| { | |
| Suite *s = suite_create ("rtp_header_extension_test"); | |
| TCase *tc_chain = tcase_create ("header extension test"); | |
| suite_add_tcase (s, tc_chain); | |
| tcase_add_test (tc_chain, rtp_header_ext_write); | |
| tcase_add_test (tc_chain, rtp_header_ext_create_from_uri); | |
| tcase_add_test (tc_chain, rtp_header_ext_caps_with_attributes); | |
| return s; | |
| } | |
| GST_CHECK_MAIN (rtp_header_extension) |