*
* 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.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <gst/check/gstcheck.h>
fail_unless (reset_time == TRUE);
gst_event_unref (event);
}
+
+ /* SELECT_STREAMS */
+ {
+ GList *streams = NULL;
+ GList *res = NULL;
+ GList *tmp;
+ streams = g_list_append (streams, (gpointer) "stream1");
+ streams = g_list_append (streams, (gpointer) "stream2");
+ event = gst_event_new_select_streams (streams);
+ fail_if (event == NULL);
+ fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_SELECT_STREAMS);
+ fail_unless (GST_EVENT_IS_UPSTREAM (event));
+
+ gst_event_parse_select_streams (event, &res);
+ fail_if (res == NULL);
+ fail_unless_equals_int (g_list_length (res), 2);
+ tmp = res;
+ fail_unless_equals_string (tmp->data, "stream1");
+ tmp = tmp->next;
+ fail_unless_equals_string (tmp->data, "stream2");
+
+ gst_event_unref (event);
+
+ g_list_free (streams);
+ g_list_free_full (res, g_free);
+ }
+
+ /* STREAM_GROUP_DONE */
+ {
+ guint group_id = 0;
+
+ event = gst_event_new_stream_group_done (0x42);
+ fail_if (event == NULL);
+ fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_GROUP_DONE);
+ fail_if (GST_EVENT_IS_UPSTREAM (event));
+ fail_unless (GST_EVENT_IS_DOWNSTREAM (event));
+ fail_unless (GST_EVENT_IS_SERIALIZED (event));
+ gst_event_parse_stream_group_done (event, &group_id);
+ fail_unless (group_id == 0x42);
+ gst_event_unref (event);
+ }
+
/* EOS */
{
event = gst_event_new_eos ();
fail_unless (GST_EVENT_IS_SERIALIZED (event));
gst_event_unref (event);
}
+ /* GAP */
+ {
+ GstClockTime ts = 0, dur = 0;
+
+ ASSERT_CRITICAL (gst_event_new_gap (GST_CLOCK_TIME_NONE, GST_SECOND));
+
+ event = gst_event_new_gap (90 * GST_SECOND, GST_SECOND);
+ fail_if (event == NULL);
+ fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_GAP);
+ fail_if (GST_EVENT_IS_UPSTREAM (event));
+ fail_unless (GST_EVENT_IS_DOWNSTREAM (event));
+ fail_unless (GST_EVENT_IS_SERIALIZED (event));
+ gst_event_parse_gap (event, &ts, NULL);
+ fail_unless_equals_int64 (ts, 90 * GST_SECOND);
+ gst_event_parse_gap (event, &ts, &dur);
+ fail_unless_equals_int64 (dur, GST_SECOND);
+ gst_event_unref (event);
+ }
/* SEGMENT */
{
GstSegment segment, parsed;
gdouble rate;
GstFormat format;
GstSeekFlags flags;
- GstSeekType cur_type, stop_type;
- gint64 cur, stop;
+ GstSeekType start_type, stop_type;
+ gint64 start, stop;
+ GstClockTime trickmode_interval;
event = gst_event_new_seek (0.5, GST_FORMAT_BYTES,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
fail_if (GST_EVENT_IS_DOWNSTREAM (event));
fail_if (GST_EVENT_IS_SERIALIZED (event));
- gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+ gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
&stop_type, &stop);
fail_unless (rate == 0.5);
fail_unless (format == GST_FORMAT_BYTES);
fail_unless (flags == (GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE));
- fail_unless (cur_type == GST_SEEK_TYPE_SET);
- fail_unless (cur == 1);
+ fail_unless (start_type == GST_SEEK_TYPE_SET);
+ fail_unless (start == 1);
fail_unless (stop_type == GST_SEEK_TYPE_NONE);
fail_unless (stop == 0xdeadbeef);
+ gst_event_parse_seek_trickmode_interval (event, &trickmode_interval);
+ fail_unless_equals_uint64 (trickmode_interval, 0);
+
+ gst_event_set_seek_trickmode_interval (event, GST_SECOND);
+ gst_event_parse_seek_trickmode_interval (event, &trickmode_interval);
+ fail_unless_equals_uint64 (trickmode_interval, GST_SECOND);
+
+ gst_event_ref (event);
+ ASSERT_CRITICAL (gst_event_set_seek_trickmode_interval (event,
+ 2 * GST_SECOND));
+ gst_event_unref (event);
+
+ gst_event_unref (event);
+
+ event = gst_event_new_flush_start ();
+ ASSERT_CRITICAL (gst_event_set_seek_trickmode_interval (event, GST_SECOND));
gst_event_unref (event);
}
+ /* STREAM_START */
+ {
+ GstStreamFlags flags = ~GST_STREAM_FLAG_NONE;
+
+ event = gst_event_new_stream_start ("7f4b2f0/audio_02");
+ fail_if (event == NULL);
+ fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
+ fail_if (GST_EVENT_IS_UPSTREAM (event));
+ fail_unless (GST_EVENT_IS_DOWNSTREAM (event));
+ fail_unless (GST_EVENT_IS_SERIALIZED (event));
+ gst_event_parse_stream_flags (event, &flags);
+ fail_unless_equals_int (flags, GST_STREAM_FLAG_NONE);
+ gst_event_set_stream_flags (event, GST_STREAM_FLAG_SPARSE);
+ gst_event_parse_stream_flags (event, &flags);
+ fail_unless_equals_int (flags, GST_STREAM_FLAG_SPARSE);
+ gst_event_ref (event);
+ ASSERT_CRITICAL (gst_event_set_stream_flags (event, GST_STREAM_FLAG_NONE));
+ gst_event_unref (event);
+ gst_event_unref (event);
+ }
+
+ /* STREAM_COLLECTION */
+ {
+ GstStreamCollection *collection, *res = NULL;
+ GstStream *stream1, *stream2;
+ GstCaps *caps1, *caps2;
+
+ /* Create a collection of two streams */
+ caps1 = gst_caps_from_string ("some/caps");
+ caps2 = gst_caps_from_string ("some/other-string");
+
+ stream1 = gst_stream_new ("stream-1", caps1, GST_STREAM_TYPE_AUDIO, 0);
+ stream2 = gst_stream_new ("stream-2", caps2, GST_STREAM_TYPE_VIDEO, 0);
+
+ collection = gst_stream_collection_new ("something");
+ fail_unless (gst_stream_collection_add_stream (collection, stream1));
+ fail_unless (gst_stream_collection_add_stream (collection, stream2));
+
+ event = gst_event_new_stream_collection (collection);
+ fail_unless (event != NULL);
+
+ gst_event_parse_stream_collection (event, &res);
+ fail_unless (res != NULL);
+ fail_unless (res == collection);
+
+ gst_event_unref (event);
+ gst_object_unref (res);
+ gst_object_unref (collection);
+ gst_caps_unref (caps1);
+ gst_caps_unref (caps2);
+ }
+
/* NAVIGATION */
{
structure = gst_structure_new ("application/x-gst-navigation", "event",
gst_event_unref (event);
}
+ /* Protection */
+ {
+ GstBuffer *data;
+ GstMemory *mem;
+ const gchar *parsed_origin;
+ const gchar *parsed_id;
+ GstBuffer *parsed_data;
+ const gchar clearkey_sys_id[] = "78f32170-d883-11e0-9572-0800200c9a66";
+ gsize offset;
+
+ data = gst_buffer_new ();
+ mem = gst_allocator_alloc (NULL, 40, NULL);
+ gst_buffer_insert_memory (data, -1, mem);
+ for (offset = 0; offset < 40; offset += 4) {
+ gst_buffer_fill (data, offset, "pssi", 4);
+ }
+ ASSERT_MINI_OBJECT_REFCOUNT (data, "data", 1);
+ event = gst_event_new_protection (clearkey_sys_id, data, "test");
+ fail_if (event == NULL);
+ ASSERT_MINI_OBJECT_REFCOUNT (data, "data", 2);
+ fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_PROTECTION);
+ fail_unless (GST_EVENT_IS_DOWNSTREAM (event));
+ fail_unless (GST_EVENT_IS_SERIALIZED (event));
+ gst_event_parse_protection (event, &parsed_id, &parsed_data,
+ &parsed_origin);
+ fail_if (parsed_id == NULL);
+ fail_unless (g_strcmp0 (clearkey_sys_id, parsed_id) == 0);
+ fail_if (parsed_data == NULL);
+ fail_if (parsed_data != data);
+ ASSERT_MINI_OBJECT_REFCOUNT (data, "data", 2);
+ fail_if (parsed_origin == NULL);
+ fail_unless (g_strcmp0 ("test", parsed_origin) == 0);
+ gst_event_unref (event);
+ ASSERT_MINI_OBJECT_REFCOUNT (data, "data", 1);
+ gst_buffer_unref (data);
+ }
+
/* Custom event types */
{
structure = gst_structure_new_empty ("application/x-custom");
typedef struct
{
- GMutex *lock;
- GCond *cond;
+ GMutex lock;
+ GCond cond;
gboolean signaled;
} SignalData;
signal_data_init (SignalData * data)
{
GST_DEBUG ("init %p", data);
- data->lock = g_mutex_new ();
- data->cond = g_cond_new ();
+ g_mutex_init (&data->lock);
+ g_cond_init (&data->cond);
data->signaled = FALSE;
}
signal_data_cleanup (SignalData * data)
{
GST_DEBUG ("free %p", data);
- g_mutex_free (data->lock);
- g_cond_free (data->cond);
+ g_mutex_clear (&data->lock);
+ g_cond_clear (&data->cond);
}
static void
signal_data_signal (SignalData * data)
{
- g_mutex_lock (data->lock);
+ g_mutex_lock (&data->lock);
data->signaled = TRUE;
- g_cond_broadcast (data->cond);
+ g_cond_broadcast (&data->cond);
GST_DEBUG ("signaling %p", data);
- g_mutex_unlock (data->lock);
+ g_mutex_unlock (&data->lock);
}
static void
signal_data_wait (SignalData * data)
{
- g_mutex_lock (data->lock);
+ g_mutex_lock (&data->lock);
GST_DEBUG ("signal wait %p", data);
while (!data->signaled)
- g_cond_wait (data->cond, data->lock);
+ g_cond_wait (&data->cond, &data->lock);
GST_DEBUG ("signal wait done %p", data);
- g_mutex_unlock (data->lock);
+ g_mutex_unlock (&data->lock);
}
static GstPadProbeReturn