Blame tests/check/gst/gststream.c

Packit Service 963350
/* GStreamer
Packit Service 963350
 * Copyright (C) <2015> Edward Hervey <edward@centricular.com>
Packit Service 963350
 *
Packit Service 963350
 * gststructure.c: Unit tests for GstStream and GstStreamCollection
Packit Service 963350
 *
Packit Service 963350
 * This library is free software; you can redistribute it and/or
Packit Service 963350
 * modify it under the terms of the GNU Library General Public
Packit Service 963350
 * License as published by the Free Software Foundation; either
Packit Service 963350
 * version 2 of the License, or (at your option) any later version.
Packit Service 963350
 *
Packit Service 963350
 * This library is distributed in the hope that it will be useful,
Packit Service 963350
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 963350
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 963350
 * Library General Public License for more details.
Packit Service 963350
 *
Packit Service 963350
 * You should have received a copy of the GNU Library General Public
Packit Service 963350
 * License along with this library; if not, write to the
Packit Service 963350
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit Service 963350
 * Boston, MA 02110-1301, USA.
Packit Service 963350
 */
Packit Service 963350
#ifdef HAVE_CONFIG_H
Packit Service 963350
#include "config.h"
Packit Service 963350
#endif
Packit Service 963350
Packit Service 963350
#include <gst/gst.h>
Packit Service 963350
#include <gst/check/gstcheck.h>
Packit Service 963350
Packit Service 963350
GST_START_TEST (test_stream_creation)
Packit Service 963350
{
Packit Service 963350
  GstStream *stream;
Packit Service 963350
  GstCaps *caps;
Packit Service 963350
  GstCaps *caps2;
Packit Service 963350
  GstTagList *tags, *tags2;
Packit Service 963350
Packit Service 963350
  caps = gst_caps_from_string ("some/caps");
Packit Service 963350
  stream = gst_stream_new ("stream-id", caps, GST_STREAM_TYPE_AUDIO, 0);
Packit Service 963350
  fail_unless (stream != NULL);
Packit Service 963350
Packit Service 963350
  fail_unless_equals_string (gst_stream_get_stream_id (stream), "stream-id");
Packit Service 963350
  caps2 = gst_stream_get_caps (stream);
Packit Service 963350
  fail_unless (gst_caps_is_equal (caps, caps2));
Packit Service 963350
  gst_caps_unref (caps2);
Packit Service 963350
Packit Service 963350
  fail_unless (gst_stream_get_stream_type (stream) == GST_STREAM_TYPE_AUDIO);
Packit Service 963350
Packit Service 963350
  gst_caps_unref (caps);
Packit Service 963350
Packit Service 963350
  tags = gst_tag_list_new (GST_TAG_ALBUM, "test-album", NULL);
Packit Service 963350
  g_object_set (stream, "tags", tags, NULL);
Packit Service 963350
  tags2 = gst_stream_get_tags (stream);
Packit Service 963350
  fail_unless (gst_tag_list_is_equal (tags, tags2));
Packit Service 963350
  gst_tag_list_unref (tags);
Packit Service 963350
  gst_tag_list_unref (tags2);
Packit Service 963350
Packit Service 963350
  gst_object_unref (stream);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
GST_END_TEST;
Packit Service 963350
Packit Service 963350
GST_START_TEST (test_stream_event)
Packit Service 963350
{
Packit Service 963350
  GstEvent *event;
Packit Service 963350
  GstStream *stream, *stream2 = NULL;
Packit Service 963350
  GstCaps *caps;
Packit Service 963350
  GstCaps *caps2;
Packit Service 963350
Packit Service 963350
  event = gst_event_new_stream_start ("here/we/go");
Packit Service 963350
  /* By default a stream-start event has no stream */
Packit Service 963350
  gst_event_parse_stream (event, &stream2);
Packit Service 963350
  fail_if (stream2 != NULL);
Packit Service 963350
Packit Service 963350
  /* Create and set stream on event */
Packit Service 963350
  caps = gst_caps_from_string ("some/caps");
Packit Service 963350
  stream = gst_stream_new ("here/we/go", caps, GST_STREAM_TYPE_AUDIO, 0);
Packit Service 963350
  fail_unless (stream != NULL);
Packit Service 963350
  gst_event_set_stream (event, stream);
Packit Service 963350
Packit Service 963350
  /* Parse and check it's the same */
Packit Service 963350
  gst_event_parse_stream (event, &stream2);
Packit Service 963350
  fail_unless (stream2 != NULL);
Packit Service 963350
  fail_unless_equals_string (gst_stream_get_stream_id (stream2), "here/we/go");
Packit Service 963350
  caps2 = gst_stream_get_caps (stream);
Packit Service 963350
  fail_unless (gst_caps_is_equal (caps, caps2));
Packit Service 963350
  fail_unless (gst_stream_get_stream_type (stream) == GST_STREAM_TYPE_AUDIO);
Packit Service 963350
  gst_caps_unref (caps2);
Packit Service 963350
Packit Service 963350
  gst_event_unref (event);
Packit Service 963350
  gst_caps_unref (caps);
Packit Service 963350
  gst_object_unref (stream);
Packit Service 963350
  gst_object_unref (stream2);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
GST_END_TEST;
Packit Service 963350
Packit Service 963350
struct NotifyStats
Packit Service 963350
{
Packit Service 963350
  guint collection_notify;
Packit Service 963350
  guint collection_notify_caps;
Packit Service 963350
  guint collection_notify_tags;
Packit Service 963350
  guint collection_notify_type;
Packit Service 963350
  guint collection_notify_flags;
Packit Service 963350
Packit Service 963350
  guint stream_notify;
Packit Service 963350
  guint stream_notify_caps;
Packit Service 963350
  guint stream_notify_tags;
Packit Service 963350
  guint stream_notify_type;
Packit Service 963350
  guint stream_notify_flags;
Packit Service 963350
Packit Service 963350
  guint stream2_notify;
Packit Service 963350
  guint stream2_notify_caps;
Packit Service 963350
  guint stream2_notify_tags;
Packit Service 963350
  guint stream2_notify_type;
Packit Service 963350
  guint stream2_notify_flags;
Packit Service 963350
};
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
stream_notify_cb (GstStreamCollection * collection, GstStream * stream,
Packit Service 963350
    GParamSpec * pspec, guint * val)
Packit Service 963350
{
Packit Service 963350
  GST_LOG ("Got stream-notify from %" GST_PTR_FORMAT " for %s from %"
Packit Service 963350
      GST_PTR_FORMAT, stream, pspec->name, collection);
Packit Service 963350
  (*val)++;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
notify_cb (GstStream * stream, GParamSpec * pspec, guint * val)
Packit Service 963350
{
Packit Service 963350
  GST_LOG ("Got notify from %" GST_PTR_FORMAT " for %s", stream, pspec->name);
Packit Service 963350
  (*val)++;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
GST_START_TEST (test_notifies)
Packit Service 963350
{
Packit Service 963350
  GstStreamCollection *collection;
Packit Service 963350
  GstStream *stream, *stream2 = NULL;
Packit Service 963350
  GstCaps *caps;
Packit Service 963350
  struct NotifyStats stats = { 0, };
Packit Service 963350
  GstTagList *tags;
Packit Service 963350
Packit Service 963350
  collection = gst_stream_collection_new ("check-collection");
Packit Service 963350
  g_signal_connect (collection, "stream-notify", (GCallback) stream_notify_cb,
Packit Service 963350
      &stats.collection_notify);
Packit Service 963350
  g_signal_connect (collection, "stream-notify::stream-type",
Packit Service 963350
      (GCallback) stream_notify_cb, &stats.collection_notify_type);
Packit Service 963350
  g_signal_connect (collection, "stream-notify::stream-flags",
Packit Service 963350
      (GCallback) stream_notify_cb, &stats.collection_notify_flags);
Packit Service 963350
  g_signal_connect (collection, "stream-notify::caps",
Packit Service 963350
      (GCallback) stream_notify_cb, &stats.collection_notify_caps);
Packit Service 963350
  g_signal_connect (collection, "stream-notify::tags",
Packit Service 963350
      (GCallback) stream_notify_cb, &stats.collection_notify_tags);
Packit Service 963350
Packit Service 963350
  caps = gst_caps_from_string ("some/audio-caps");
Packit Service 963350
  stream = gst_stream_new ("here/we/go", caps, GST_STREAM_TYPE_AUDIO, 0);
Packit Service 963350
  gst_caps_unref (caps);
Packit Service 963350
  g_signal_connect (stream, "notify", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream_notify);
Packit Service 963350
  g_signal_connect (stream, "notify::stream-type", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream_notify_type);
Packit Service 963350
  g_signal_connect (stream, "notify::stream-flags", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream_notify_flags);
Packit Service 963350
  g_signal_connect (stream, "notify::caps", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream_notify_caps);
Packit Service 963350
  g_signal_connect (stream, "notify::tags", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream_notify_tags);
Packit Service 963350
  gst_stream_collection_add_stream (collection, stream);
Packit Service 963350
Packit Service 963350
  caps = gst_caps_from_string ("some/video-caps");
Packit Service 963350
  stream2 = gst_stream_new ("here/we/go/again", caps, GST_STREAM_TYPE_VIDEO, 0);
Packit Service 963350
  gst_caps_unref (caps);
Packit Service 963350
  g_signal_connect (stream2, "notify", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream2_notify);
Packit Service 963350
  g_signal_connect (stream2, "notify::stream-type", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream2_notify_type);
Packit Service 963350
  g_signal_connect (stream2, "notify::stream-flags", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream2_notify_flags);
Packit Service 963350
  g_signal_connect (stream2, "notify::caps", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream2_notify_caps);
Packit Service 963350
  g_signal_connect (stream2, "notify::tags", (GCallback) notify_cb,
Packit Service 963350
      &stats.stream2_notify_tags);
Packit Service 963350
  gst_stream_collection_add_stream (collection, stream2);
Packit Service 963350
Packit Service 963350
  caps = gst_caps_from_string ("some/new-video-caps");
Packit Service 963350
  gst_stream_set_caps (stream2, caps);
Packit Service 963350
  gst_caps_unref (caps);
Packit Service 963350
Packit Service 963350
  fail_unless (stats.collection_notify == 1);
Packit Service 963350
  fail_unless (stats.collection_notify_caps == 1);
Packit Service 963350
  fail_unless (stats.stream_notify == 0);
Packit Service 963350
  fail_unless (stats.stream_notify_caps == 0);
Packit Service 963350
  fail_unless (stats.stream_notify_tags == 0);
Packit Service 963350
  fail_unless (stats.stream2_notify == 1);
Packit Service 963350
  fail_unless (stats.stream2_notify_caps == 1);
Packit Service 963350
  fail_unless (stats.stream2_notify_tags == 0);
Packit Service 963350
Packit Service 963350
  tags = gst_tag_list_new (GST_TAG_ALBUM, "test-album", NULL);
Packit Service 963350
  gst_stream_set_tags (stream, tags);
Packit Service 963350
  gst_tag_list_unref (tags);
Packit Service 963350
Packit Service 963350
  fail_unless (stats.collection_notify == 2);
Packit Service 963350
  fail_unless (stats.collection_notify_caps == 1);
Packit Service 963350
  fail_unless (stats.collection_notify_tags == 1);
Packit Service 963350
  fail_unless (stats.stream_notify == 1);
Packit Service 963350
  fail_unless (stats.stream_notify_caps == 0);
Packit Service 963350
  fail_unless (stats.stream_notify_tags == 1);
Packit Service 963350
  fail_unless (stats.stream2_notify == 1);
Packit Service 963350
  fail_unless (stats.stream2_notify_caps == 1);
Packit Service 963350
  fail_unless (stats.stream2_notify_tags == 0);
Packit Service 963350
Packit Service 963350
  gst_object_unref (collection);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
GST_END_TEST;
Packit Service 963350
Packit Service 963350
static Suite *
Packit Service 963350
gst_streams_suite (void)
Packit Service 963350
{
Packit Service 963350
  Suite *s = suite_create ("GstStream");
Packit Service 963350
  TCase *tc_chain = tcase_create ("general");
Packit Service 963350
Packit Service 963350
  suite_add_tcase (s, tc_chain);
Packit Service 963350
  tcase_add_test (tc_chain, test_stream_creation);
Packit Service 963350
  tcase_add_test (tc_chain, test_stream_event);
Packit Service 963350
  tcase_add_test (tc_chain, test_notifies);
Packit Service 963350
  return s;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
GST_CHECK_MAIN (gst_streams);