Blame tests/check/elements/rtpbundle.c

Packit 1f69a5
/* GStreamer
Packit 1f69a5
 *
Packit 1f69a5
 * Copyright (C) 2016 Igalia S.L.
Packit 1f69a5
 *   @author Philippe Normand <philn@igalia.com>
Packit 1f69a5
 *
Packit 1f69a5
 * This library is free software; you can redistribute it and/or
Packit 1f69a5
 * modify it under the terms of the GNU Library General Public
Packit 1f69a5
 * License as published by the Free Software Foundation; either
Packit 1f69a5
 * version 2 of the License, or (at your option) any later version.
Packit 1f69a5
 *
Packit 1f69a5
 * This library is distributed in the hope that it will be useful,
Packit 1f69a5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1f69a5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 1f69a5
 * Library General Public License for more details.
Packit 1f69a5
 *
Packit 1f69a5
 * You should have received a copy of the GNU Library General Public
Packit 1f69a5
 * License along with this library; if not, write to the
Packit 1f69a5
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit 1f69a5
 * Boston, MA 02110-1301, USA.
Packit 1f69a5
 */
Packit 1f69a5
Packit 1f69a5
#include <gst/check/gstcheck.h>
Packit 1f69a5
#include <gst/check/gstconsistencychecker.h>
Packit 1f69a5
#include <gst/check/gsttestclock.h>
Packit 1f69a5
#include <gst/rtp/gstrtpbuffer.h>
Packit 1f69a5
Packit 1f69a5
static GMainLoop *main_loop;
Packit 1f69a5
Packit 1f69a5
static void
Packit 1f69a5
message_received (GstBus * bus, GstMessage * message, GstPipeline * bin)
Packit 1f69a5
{
Packit 1f69a5
  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
Packit 1f69a5
      GST_MESSAGE_SRC (message), message);
Packit 1f69a5
Packit 1f69a5
  switch (message->type) {
Packit 1f69a5
    case GST_MESSAGE_EOS:
Packit 1f69a5
      g_main_loop_quit (main_loop);
Packit 1f69a5
      break;
Packit 1f69a5
    case GST_MESSAGE_WARNING:{
Packit 1f69a5
      GError *gerror;
Packit 1f69a5
      gchar *debug;
Packit 1f69a5
Packit 1f69a5
      gst_message_parse_warning (message, &gerror, &debug);
Packit 1f69a5
      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
Packit 1f69a5
      g_error_free (gerror);
Packit 1f69a5
      g_free (debug);
Packit 1f69a5
      break;
Packit 1f69a5
    }
Packit 1f69a5
    case GST_MESSAGE_ERROR:{
Packit 1f69a5
      GError *gerror;
Packit 1f69a5
      gchar *debug;
Packit 1f69a5
Packit 1f69a5
      gst_message_parse_error (message, &gerror, &debug);
Packit 1f69a5
      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
Packit 1f69a5
      g_error_free (gerror);
Packit 1f69a5
      g_free (debug);
Packit 1f69a5
      fail ("Error!");
Packit 1f69a5
      break;
Packit 1f69a5
    }
Packit 1f69a5
    default:
Packit 1f69a5
      break;
Packit 1f69a5
  }
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
static void
Packit 1f69a5
on_rtpbinreceive_pad_added (GstElement * element, GstPad * new_pad,
Packit 1f69a5
    gpointer data)
Packit 1f69a5
{
Packit 1f69a5
  GstElement *pipeline = GST_ELEMENT (data);
Packit 1f69a5
  gchar *pad_name = gst_pad_get_name (new_pad);
Packit 1f69a5
Packit 1f69a5
  if (g_str_has_prefix (pad_name, "recv_rtp_src_")) {
Packit 1f69a5
    GstCaps *caps = gst_pad_get_current_caps (new_pad);
Packit 1f69a5
    GstStructure *s = gst_caps_get_structure (caps, 0);
Packit 1f69a5
    const gchar *media_type = gst_structure_get_string (s, "media");
Packit 1f69a5
    gchar *depayloader_name = g_strdup_printf ("%s_rtpdepayloader", media_type);
Packit 1f69a5
    GstElement *rtpdepayloader =
Packit 1f69a5
        gst_bin_get_by_name (GST_BIN (pipeline), depayloader_name);
Packit 1f69a5
    GstPad *sinkpad;
Packit 1f69a5
Packit 1f69a5
    g_free (depayloader_name);
Packit 1f69a5
    fail_unless (rtpdepayloader != NULL, NULL);
Packit 1f69a5
Packit 1f69a5
    sinkpad = gst_element_get_static_pad (rtpdepayloader, "sink");
Packit 1f69a5
    gst_pad_link (new_pad, sinkpad);
Packit 1f69a5
    gst_object_unref (sinkpad);
Packit 1f69a5
    gst_object_unref (rtpdepayloader);
Packit 1f69a5
Packit 1f69a5
    gst_caps_unref (caps);
Packit 1f69a5
  }
Packit 1f69a5
  g_free (pad_name);
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
static guint
Packit 1f69a5
on_bundled_ssrc (GstElement * rtpbin, guint ssrc, gpointer user_data)
Packit 1f69a5
{
Packit 1f69a5
  static gboolean create_session = FALSE;
Packit 1f69a5
  guint session_id = 0;
Packit 1f69a5
Packit 1f69a5
  if (create_session) {
Packit 1f69a5
    session_id = 1;
Packit 1f69a5
  } else {
Packit 1f69a5
    create_session = TRUE;
Packit 1f69a5
    /* use existing session 0, a new session will be created for the next discovered bundled SSRC */
Packit 1f69a5
  }
Packit 1f69a5
  return session_id;
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
static GstCaps *
Packit 1f69a5
on_request_pt_map (GstElement * rtpbin, guint session_id, guint pt,
Packit 1f69a5
    gpointer user_data)
Packit 1f69a5
{
Packit 1f69a5
  GstCaps *caps = NULL;
Packit 1f69a5
  if (pt == 96) {
Packit 1f69a5
    caps =
Packit 1f69a5
        gst_caps_from_string
Packit 1f69a5
        ("application/x-rtp,media=(string)audio,encoding-name=(string)PCMA,clock-rate=(int)8000");
Packit 1f69a5
  } else if (pt == 100) {
Packit 1f69a5
    caps =
Packit 1f69a5
        gst_caps_from_string
Packit 1f69a5
        ("application/x-rtp,media=(string)video,encoding-name=(string)RAW,clock-rate=(int)90000,sampling=(string)\"YCbCr-4:2:0\",depth=(string)8,width=(string)320,height=(string)240");
Packit 1f69a5
  }
Packit 1f69a5
  return caps;
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
Packit 1f69a5
static GstElement *
Packit 1f69a5
create_pipeline (gboolean send)
Packit 1f69a5
{
Packit 1f69a5
  GstElement *pipeline, *rtpbin, *audiosrc, *audio_encoder,
Packit 1f69a5
      *audio_rtppayloader, *sendrtp_udpsink, *recv_rtp_udpsrc,
Packit 1f69a5
      *send_rtcp_udpsink, *recv_rtcp_udpsrc, *sendrtcp_funnel, *sendrtp_funnel;
Packit 1f69a5
  GstElement *audio_rtpdepayloader, *audio_decoder, *audio_sink;
Packit 1f69a5
  GstElement *videosrc, *video_rtppayloader, *video_rtpdepayloader, *video_sink;
Packit 1f69a5
  gboolean res;
Packit 1f69a5
  GstPad *funnel_pad, *rtp_src_pad;
Packit 1f69a5
  GstCaps *rtpcaps;
Packit 1f69a5
  gint rtp_udp_port = 5001;
Packit 1f69a5
  gint rtcp_udp_port = 5002;
Packit 1f69a5
Packit 1f69a5
  pipeline = gst_pipeline_new (send ? "pipeline_send" : "pipeline_receive");
Packit 1f69a5
Packit 1f69a5
  rtpbin =
Packit 1f69a5
      gst_element_factory_make ("rtpbin",
Packit 1f69a5
      send ? "rtpbin_send" : "rtpbin_receive");
Packit 1f69a5
  g_object_set (rtpbin, "latency", 200, NULL);
Packit 1f69a5
Packit 1f69a5
  if (!send) {
Packit 1f69a5
    g_signal_connect (rtpbin, "on-bundled-ssrc",
Packit 1f69a5
        G_CALLBACK (on_bundled_ssrc), NULL);
Packit 1f69a5
    g_signal_connect (rtpbin, "request-pt-map",
Packit 1f69a5
        G_CALLBACK (on_request_pt_map), NULL);
Packit 1f69a5
  }
Packit 1f69a5
Packit 1f69a5
  g_signal_connect (rtpbin, "pad-added",
Packit 1f69a5
      G_CALLBACK (on_rtpbinreceive_pad_added), pipeline);
Packit 1f69a5
Packit 1f69a5
  gst_bin_add (GST_BIN (pipeline), rtpbin);
Packit 1f69a5
Packit 1f69a5
  if (send) {
Packit 1f69a5
    audiosrc = gst_element_factory_make ("audiotestsrc", NULL);
Packit 1f69a5
    audio_encoder = gst_element_factory_make ("alawenc", NULL);
Packit 1f69a5
    audio_rtppayloader = gst_element_factory_make ("rtppcmapay", NULL);
Packit 1f69a5
    g_object_set (audio_rtppayloader, "pt", 96, NULL);
Packit 1f69a5
    g_object_set (audio_rtppayloader, "seqnum-offset", 1, NULL);
Packit 1f69a5
Packit 1f69a5
    videosrc = gst_element_factory_make ("videotestsrc", NULL);
Packit 1f69a5
    video_rtppayloader = gst_element_factory_make ("rtpvrawpay", NULL);
Packit 1f69a5
    g_object_set (video_rtppayloader, "pt", 100, "seqnum-offset", 1, NULL);
Packit 1f69a5
Packit 1f69a5
    g_object_set (audiosrc, "num-buffers", 5, NULL);
Packit 1f69a5
    g_object_set (videosrc, "num-buffers", 5, NULL);
Packit 1f69a5
Packit 1f69a5
    /* muxed rtcp */
Packit 1f69a5
    sendrtcp_funnel = gst_element_factory_make ("funnel", "send_rtcp_funnel");
Packit 1f69a5
    send_rtcp_udpsink = gst_element_factory_make ("udpsink", NULL);
Packit 1f69a5
    g_object_set (send_rtcp_udpsink, "host", "127.0.0.1", NULL);
Packit 1f69a5
    g_object_set (send_rtcp_udpsink, "port", rtcp_udp_port, NULL);
Packit 1f69a5
    g_object_set (send_rtcp_udpsink, "sync", FALSE, NULL);
Packit 1f69a5
    g_object_set (send_rtcp_udpsink, "async", FALSE, NULL);
Packit 1f69a5
Packit 1f69a5
    /* outgoing bundled stream */
Packit 1f69a5
    sendrtp_funnel = gst_element_factory_make ("funnel", "send_rtp_funnel");
Packit 1f69a5
    sendrtp_udpsink = gst_element_factory_make ("udpsink", NULL);
Packit 1f69a5
    g_object_set (sendrtp_udpsink, "host", "127.0.0.1", NULL);
Packit 1f69a5
    g_object_set (sendrtp_udpsink, "port", rtp_udp_port, NULL);
Packit 1f69a5
Packit 1f69a5
    gst_bin_add_many (GST_BIN (pipeline), audiosrc, audio_encoder,
Packit 1f69a5
        audio_rtppayloader, sendrtp_udpsink, send_rtcp_udpsink,
Packit 1f69a5
        sendrtp_funnel, sendrtcp_funnel, videosrc, video_rtppayloader, NULL);
Packit 1f69a5
Packit 1f69a5
    res = gst_element_link (audiosrc, audio_encoder);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
    res = gst_element_link (audio_encoder, audio_rtppayloader);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (audio_rtppayloader, "src", rtpbin,
Packit 1f69a5
        "send_rtp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    res = gst_element_link (videosrc, video_rtppayloader);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (video_rtppayloader, "src", rtpbin,
Packit 1f69a5
        "send_rtp_sink_1", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (sendrtp_funnel, "src", sendrtp_udpsink,
Packit 1f69a5
        "sink", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    funnel_pad = gst_element_get_request_pad (sendrtp_funnel, "sink_%u");
Packit 1f69a5
    rtp_src_pad = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
Packit 1f69a5
    res = gst_pad_link (rtp_src_pad, funnel_pad);
Packit 1f69a5
    gst_object_unref (funnel_pad);
Packit 1f69a5
    gst_object_unref (rtp_src_pad);
Packit 1f69a5
Packit 1f69a5
    funnel_pad = gst_element_get_request_pad (sendrtp_funnel, "sink_%u");
Packit 1f69a5
    rtp_src_pad = gst_element_get_static_pad (rtpbin, "send_rtp_src_1");
Packit 1f69a5
    res = gst_pad_link (rtp_src_pad, funnel_pad);
Packit 1f69a5
    gst_object_unref (funnel_pad);
Packit 1f69a5
    gst_object_unref (rtp_src_pad);
Packit 1f69a5
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (sendrtcp_funnel, "src", send_rtcp_udpsink,
Packit 1f69a5
        "sink", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    funnel_pad = gst_element_get_request_pad (sendrtcp_funnel, "sink_%u");
Packit 1f69a5
    rtp_src_pad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
Packit 1f69a5
    res =
Packit 1f69a5
        gst_pad_link_full (rtp_src_pad, funnel_pad, GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    gst_object_unref (funnel_pad);
Packit 1f69a5
    gst_object_unref (rtp_src_pad);
Packit 1f69a5
Packit 1f69a5
    funnel_pad = gst_element_get_request_pad (sendrtcp_funnel, "sink_%u");
Packit 1f69a5
    rtp_src_pad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_1");
Packit 1f69a5
    res =
Packit 1f69a5
        gst_pad_link_full (rtp_src_pad, funnel_pad, GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    gst_object_unref (funnel_pad);
Packit 1f69a5
    gst_object_unref (rtp_src_pad);
Packit 1f69a5
Packit 1f69a5
  } else {
Packit 1f69a5
    recv_rtp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
Packit 1f69a5
    g_object_set (recv_rtp_udpsrc, "port", rtp_udp_port, NULL);
Packit 1f69a5
    rtpcaps = gst_caps_from_string ("application/x-rtp");
Packit 1f69a5
    g_object_set (recv_rtp_udpsrc, "caps", rtpcaps, NULL);
Packit 1f69a5
    gst_caps_unref (rtpcaps);
Packit 1f69a5
Packit 1f69a5
    recv_rtcp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
Packit 1f69a5
    g_object_set (recv_rtcp_udpsrc, "port", rtcp_udp_port, NULL);
Packit 1f69a5
Packit 1f69a5
    audio_rtpdepayloader =
Packit 1f69a5
        gst_element_factory_make ("rtppcmadepay", "audio_rtpdepayloader");
Packit 1f69a5
    audio_decoder = gst_element_factory_make ("alawdec", NULL);
Packit 1f69a5
    audio_sink = gst_element_factory_make ("fakesink", NULL);
Packit 1f69a5
    g_object_set (audio_sink, "sync", TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    video_rtpdepayloader =
Packit 1f69a5
        gst_element_factory_make ("rtpvrawdepay", "video_rtpdepayloader");
Packit 1f69a5
    video_sink = gst_element_factory_make ("fakesink", NULL);
Packit 1f69a5
    g_object_set (video_sink, "sync", TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    gst_bin_add_many (GST_BIN (pipeline), recv_rtp_udpsrc, recv_rtcp_udpsrc,
Packit 1f69a5
        audio_rtpdepayloader, audio_decoder, audio_sink, video_rtpdepayloader,
Packit 1f69a5
        video_sink, NULL);
Packit 1f69a5
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (audio_rtpdepayloader, "src", audio_decoder,
Packit 1f69a5
        "sink", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
    res = gst_element_link (audio_decoder, audio_sink);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (video_rtpdepayloader, "src", video_sink,
Packit 1f69a5
        "sink", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
Packit 1f69a5
    /* request a single receiving RTP session. */
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (recv_rtcp_udpsrc, "src", rtpbin,
Packit 1f69a5
        "recv_rtcp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
    res =
Packit 1f69a5
        gst_element_link_pads_full (recv_rtp_udpsrc, "src", rtpbin,
Packit 1f69a5
        "recv_rtp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
Packit 1f69a5
    fail_unless (res == TRUE, NULL);
Packit 1f69a5
  }
Packit 1f69a5
Packit 1f69a5
  return pipeline;
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
GST_START_TEST (test_simple_rtpbin_bundle)
Packit 1f69a5
{
Packit 1f69a5
  GstElement *send_pipeline, *recv_pipeline;
Packit 1f69a5
  GstBus *send_bus, *recv_bus;
Packit 1f69a5
  GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
Packit 1f69a5
  GstElement *rtpbin_receive;
Packit 1f69a5
  GObject *rtp_session;
Packit 1f69a5
Packit 1f69a5
  main_loop = g_main_loop_new (NULL, FALSE);
Packit 1f69a5
Packit 1f69a5
  send_pipeline = create_pipeline (TRUE);
Packit 1f69a5
  recv_pipeline = create_pipeline (FALSE);
Packit 1f69a5
Packit 1f69a5
  send_bus = gst_element_get_bus (send_pipeline);
Packit 1f69a5
  gst_bus_add_signal_watch_full (send_bus, G_PRIORITY_HIGH);
Packit 1f69a5
Packit 1f69a5
  g_signal_connect (send_bus, "message::error", (GCallback) message_received,
Packit 1f69a5
      send_pipeline);
Packit 1f69a5
  g_signal_connect (send_bus, "message::warning", (GCallback) message_received,
Packit 1f69a5
      send_pipeline);
Packit 1f69a5
  g_signal_connect (send_bus, "message::eos", (GCallback) message_received,
Packit 1f69a5
      send_pipeline);
Packit 1f69a5
Packit 1f69a5
  recv_bus = gst_element_get_bus (recv_pipeline);
Packit 1f69a5
  gst_bus_add_signal_watch_full (recv_bus, G_PRIORITY_HIGH);
Packit 1f69a5
Packit 1f69a5
  g_signal_connect (recv_bus, "message::error", (GCallback) message_received,
Packit 1f69a5
      recv_pipeline);
Packit 1f69a5
  g_signal_connect (recv_bus, "message::warning", (GCallback) message_received,
Packit 1f69a5
      recv_pipeline);
Packit 1f69a5
  g_signal_connect (recv_bus, "message::eos", (GCallback) message_received,
Packit 1f69a5
      recv_pipeline);
Packit 1f69a5
Packit 1f69a5
  state_res = gst_element_set_state (recv_pipeline, GST_STATE_PLAYING);
Packit 1f69a5
  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
Packit 1f69a5
Packit 1f69a5
  state_res = gst_element_set_state (send_pipeline, GST_STATE_PLAYING);
Packit 1f69a5
  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
Packit 1f69a5
Packit 1f69a5
  GST_INFO ("enter mainloop");
Packit 1f69a5
  g_main_loop_run (main_loop);
Packit 1f69a5
  GST_INFO ("exit mainloop");
Packit 1f69a5
Packit 1f69a5
  rtpbin_receive =
Packit 1f69a5
      gst_bin_get_by_name (GST_BIN (recv_pipeline), "rtpbin_receive");
Packit 1f69a5
  fail_if (rtpbin_receive == NULL, NULL);
Packit 1f69a5
Packit 1f69a5
  /* Check that 2 RTP sessions where created while only one was explicitely requested. */
Packit 1f69a5
  g_signal_emit_by_name (rtpbin_receive, "get-internal-session", 0,
Packit 1f69a5
      &rtp_session);
Packit 1f69a5
  fail_if (rtp_session == NULL, NULL);
Packit 1f69a5
  g_object_unref (rtp_session);
Packit 1f69a5
  g_signal_emit_by_name (rtpbin_receive, "get-internal-session", 1,
Packit 1f69a5
      &rtp_session);
Packit 1f69a5
  fail_if (rtp_session == NULL, NULL);
Packit 1f69a5
  g_object_unref (rtp_session);
Packit 1f69a5
Packit 1f69a5
  gst_object_unref (rtpbin_receive);
Packit 1f69a5
Packit 1f69a5
  state_res = gst_element_set_state (send_pipeline, GST_STATE_NULL);
Packit 1f69a5
  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
Packit 1f69a5
Packit 1f69a5
  state_res = gst_element_set_state (recv_pipeline, GST_STATE_NULL);
Packit 1f69a5
  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
Packit 1f69a5
Packit 1f69a5
  /* cleanup */
Packit 1f69a5
  g_main_loop_unref (main_loop);
Packit 1f69a5
Packit 1f69a5
  gst_bus_remove_signal_watch (send_bus);
Packit 1f69a5
  gst_object_unref (send_bus);
Packit 1f69a5
  gst_object_unref (send_pipeline);
Packit 1f69a5
Packit 1f69a5
  gst_bus_remove_signal_watch (recv_bus);
Packit 1f69a5
  gst_object_unref (recv_bus);
Packit 1f69a5
  gst_object_unref (recv_pipeline);
Packit 1f69a5
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
GST_END_TEST;
Packit 1f69a5
Packit 1f69a5
static Suite *
Packit 1f69a5
rtpbundle_suite (void)
Packit 1f69a5
{
Packit 1f69a5
  Suite *s = suite_create ("rtpbundle");
Packit 1f69a5
  TCase *tc_chain = tcase_create ("general");
Packit 1f69a5
Packit 1f69a5
  tcase_set_timeout (tc_chain, 10000);
Packit 1f69a5
Packit 1f69a5
  suite_add_tcase (s, tc_chain);
Packit 1f69a5
Packit 1f69a5
  tcase_add_test (tc_chain, test_simple_rtpbin_bundle);
Packit 1f69a5
Packit 1f69a5
  return s;
Packit 1f69a5
}
Packit 1f69a5
Packit 1f69a5
GST_CHECK_MAIN (rtpbundle);