Exemple #1
0
/*
* check if we can disconnect a src machine from a sink while playing.
*/
static void
test_bt_setup_dynamic_rem_src (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup =
      (BtSetup *) check_gobject_get_object_property (song, "setup");
  BtSequence *sequence =
      (BtSequence *) check_gobject_get_object_property (song, "sequence");
  BtMachine *sink = BT_MACHINE (bt_sink_machine_new (song, "master", NULL));
  BtMachine *gen1 =
      BT_MACHINE (bt_source_machine_new (song, "gen1", "audiotestsrc", 0L,
          NULL));
  BtMachine *gen2 =
      BT_MACHINE (bt_source_machine_new (song, "gen2", "audiotestsrc", 0L,
          NULL));
  bt_wire_new (song, gen1, sink, NULL);
  BtWire *wire2 = bt_wire_new (song, gen2, sink, NULL);
  GstElement *element1 =
      (GstElement *) check_gobject_get_object_property (gen1, "machine");
  GstElement *element2 =
      (GstElement *) check_gobject_get_object_property (gen2, "machine");

  g_object_set (sequence, "length", 64L, "loop", TRUE, NULL);
  bt_sequence_add_track (sequence, gen1, -1);
  bt_sequence_add_track (sequence, gen2, -1);
  g_object_set (element1, "wave", /* silence */ 4, NULL);
  g_object_set (element2, "wave", /* silence */ 4, NULL);
  bt_machine_set_param_defaults (gen1);
  bt_machine_set_param_defaults (gen2);
  mark_point ();

  /* play the song */
  if (bt_song_play (song)) {
    mark_point ();
    check_run_main_loop_until_playing_or_error (song);
    GST_DEBUG ("song plays");

    /* unlink machines */
    bt_setup_remove_wire (setup, wire2);
    GST_DEBUG ("wire removed");

    g_usleep (G_USEC_PER_SEC / 10);

    /* stop the song */
    bt_song_stop (song);
  } else {
    fail ("playing of song failed");
  }

  GST_INFO ("-- cleanup --");
  g_object_unref (setup);
  g_object_unref (sequence);
  BT_TEST_END;
}
Exemple #2
0
static void
run_main_loop_until_eos (void)
{
  GstElement *bin =
      (GstElement *) check_gobject_get_object_property (song, "bin");
  GMainLoop *main_loop = g_main_loop_new (NULL, FALSE);
  GstBus *bus = gst_element_get_bus (bin);
  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
  g_signal_connect (bus, "message::error", G_CALLBACK (message_received),
      (gpointer) main_loop);
  g_signal_connect (bus, "message::eos", G_CALLBACK (message_received),
      (gpointer) main_loop);
  gst_object_unref (bus);
  gst_object_unref (bin);
  // workaround for some muxers not accepting the seek and thus not going to eos
  // poll playback position 10 times a second
  // TODO(ensonic): fixed in 1.0?
  // basesrc elements do post EOS
  old_pos = -1;
  old_playing = FALSE;
  g_signal_connect (song, "notify::play-pos",
      G_CALLBACK (on_song_play_pos_notify), (gpointer) main_loop);
  g_signal_connect (song, "notify::is-playing",
      G_CALLBACK (on_song_is_playing_notify), (gpointer) main_loop);
  guint update_id =
      g_timeout_add_full (G_PRIORITY_HIGH, 1000 / 10, on_song_playback_update,
      NULL, NULL);

  bt_song_update_playback_position (song);
  GST_INFO ("running main_loop");
  g_main_loop_run (main_loop);
  GST_INFO ("finished main_loop");
  g_source_remove (update_id);
}
Exemple #3
0
static void
test_bt_machine_unbind_parameter_controls (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtMachine *machine = BT_MACHINE (bt_source_machine_new (song, "id",
          "buzztrax-test-mono-source", 0, NULL));
  GstObject *element =
      (GstObject *) check_gobject_get_object_property (machine, "machine");
  BtParameterGroup *pg = bt_machine_get_global_param_group (machine);
  BtIcControl *control = btic_device_get_control_by_name (device, "abs1");
  g_object_set (element, "g-uint", 10, NULL);
  bt_machine_bind_parameter_control (machine, element, "g-uint", control, pg);
  g_object_set (control, "value", 0, NULL);

  GST_INFO ("-- act --");
  bt_machine_unbind_parameter_controls (machine);
  g_object_set (control, "value", 100, NULL);

  GST_INFO ("-- assert --");
  ck_assert_gobject_guint_eq (element, "g-uint", 0);

  GST_INFO ("-- cleanup --");
  gst_object_unref (element);
  g_object_unref (control);
  BT_TEST_END;
}
Exemple #4
0
static void
test_setup (void)
{
  app = bt_test_application_new ();
  settings = bt_settings_make ();
  song = bt_song_new (app);
  setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  minv = G_MAXFLOAT;
  maxv = -G_MAXFLOAT;
}
Exemple #5
0
static GstElement *
get_sink_bin (void)
{
  BtMachine *machine =
      bt_setup_get_machine_by_type (setup, BT_TYPE_SINK_MACHINE);
  GstElement *sink_bin =
      GST_ELEMENT (check_gobject_get_object_property (machine, "machine"));

  g_object_try_unref (machine);

  return sink_bin;
}
Exemple #6
0
static void
test_bt_machine_state_not_overridden (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSequence *sequence =
      (BtSequence *) check_gobject_get_object_property (song, "sequence");
  BtSongInfo *song_info =
      BT_SONG_INFO (check_gobject_get_object_property (song, "song-info"));
  BtMachine *src = BT_MACHINE (bt_source_machine_new (song, "gen",
          "simsyn", 0L, NULL));
  BtMachine *sink = BT_MACHINE (bt_sink_machine_new (song, "sink", NULL));
  bt_wire_new (song, src, sink, NULL);
  BtCmdPattern *pattern = bt_cmd_pattern_new (song, src, BT_PATTERN_CMD_SOLO);
  GstElement *element =
      (GstElement *) check_gobject_get_object_property (src, "machine");

  /* duration: 0:00:00.480000000 */
  g_object_set (song_info, "bpm", 250L, "tpb", 16L, NULL);
  g_object_set (sequence, "length", 32L, NULL);
  bt_sequence_add_track (sequence, src, -1);
  bt_sequence_set_pattern (sequence, 4, 0, pattern);
  g_object_set (element, "wave", /* silence */ 4, NULL);

  GST_INFO ("-- act --");
  g_object_set (src, "state", BT_MACHINE_STATE_MUTE, NULL);
  bt_machine_update_default_state_value (src);
  bt_song_play (song);
  check_run_main_loop_until_eos_or_error (song);

  GST_INFO ("-- assert --");
  ck_assert_gobject_guint_eq (src, "state", BT_MACHINE_STATE_MUTE);

  GST_INFO ("-- cleanup --");
  gst_object_unref (element);
  g_object_unref (pattern);
  g_object_unref (sequence);
  g_object_unref (song_info);
  BT_TEST_END;
}
Exemple #7
0
static void
make_new_song (gint wave)
{
  BtSequence *sequence =
      (BtSequence *) check_gobject_get_object_property (song, "sequence");
  BtMachine *sink = BT_MACHINE (bt_sink_machine_new (song, "master", NULL));
  BtMachine *gen =
      BT_MACHINE (bt_source_machine_new (song, "gen", "audiotestsrc", 0L,
          NULL));
  BtParameterGroup *pg = bt_machine_get_global_param_group (gen);
  bt_wire_new (song, gen, sink, NULL);
  BtPattern *pattern = bt_pattern_new (song, "pattern-name", 8L, gen);
  GstElement *element =
      (GstElement *) check_gobject_get_object_property (gen, "machine");
  BtSongInfo *song_info =
      (BtSongInfo *) check_gobject_get_object_property (song, "song-info");
  gulong bpm = check_gobject_get_ulong_property (song_info, "bpm");
  gulong tpb = check_gobject_get_ulong_property (song_info, "tpb");

  // figure a good block size for the current tempo
  gint samples_per_buffer = (44100.0 * 60.0) / (bpm * tpb);

  g_object_set (sequence, "length", 4L, "loop", FALSE, NULL);
  bt_sequence_add_track (sequence, gen, -1);
  bt_sequence_set_pattern (sequence, 0, 0, (BtCmdPattern *) pattern);
  g_object_set (element, "wave", wave, "volume", 1.0, "samplesperbuffer",
      samples_per_buffer, NULL);
  bt_parameter_group_set_param_default (pg,
      bt_parameter_group_get_param_index (pg, "wave"));
  bt_parameter_group_set_param_default (pg,
      bt_parameter_group_get_param_index (pg, "volume"));

  gst_object_unref (element);
  g_object_unref (song_info);
  g_object_unref (pattern);
  g_object_unref (sequence);
  GST_INFO ("  song created");
}
Exemple #8
0
static void
test_bt_setup_new (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));

  GST_INFO ("-- act --");
  GList *machines, *wires;
  g_object_get (G_OBJECT (setup), "machines", &machines, "wires", &wires, NULL);

  GST_INFO ("-- assert --");
  fail_unless (machines == NULL, NULL);
  fail_unless (wires == NULL, NULL);

  GST_INFO ("-- cleanup --");
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #9
0
static void
test_bt_setup_machine_add_id (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));

  GST_INFO ("-- act --");
  BtMachine *source = BT_MACHINE (bt_source_machine_new (song, "src",
          "buzztrax-test-mono-source", 0, NULL));

  GST_INFO ("-- assert --");
  ck_assert_gobject_eq_and_unref (bt_setup_get_machine_by_id (setup, "src"),
      source);

  GST_INFO ("-- cleanup --");
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #10
0
static void
test_bt_song_info_tick_to_time (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSongInfo *song_info =
      BT_SONG_INFO (check_gobject_get_object_property (song, "song-info"));
  g_object_set (song_info, "bpm", 250L, "tpb", 16L, NULL);

  GST_INFO ("-- act --");
  GstClockTime ts = bt_song_info_tick_to_time (song_info, 8);

  GST_INFO ("-- assert --");
  ck_assert_int_eq (ts, 120 * GST_MSECOND);

  GST_INFO ("-- cleanup --");
  g_object_unref (song_info);
  BT_TEST_END;
}
Exemple #11
0
static void
test_bt_song_info_date_stamps (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSongInfo *song_info =
      BT_SONG_INFO (check_gobject_get_object_property (song, "song-info"));

  GST_INFO ("-- act --");
  gchar *create_dts = check_gobject_get_str_property (song_info, "create-dts");

  GST_INFO ("-- assert --");
  fail_unless (create_dts != NULL, NULL);
  ck_assert_gobject_str_eq (song_info, "change-dts", create_dts);

  GST_INFO ("-- cleanup --");
  g_free (create_dts);
  g_object_unref (song_info);
  BT_TEST_END;
}
Exemple #12
0
static void
test_bt_song_info_seconds_since_last_saved (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSongInfo *song_info =
      BT_SONG_INFO (check_gobject_get_object_property (song, "song-info"));

  GST_INFO ("-- act --");
  // TODO: waiting one sec makes this the slowest test :/
  g_usleep (G_USEC_PER_SEC);
  gint ts = bt_song_info_get_seconds_since_last_saved (song_info);

  GST_INFO ("-- assert --");
  ck_assert_int_gt (ts, 0);

  GST_INFO ("-- cleanup --");
  g_object_unref (song_info);
  BT_TEST_END;
}
Exemple #13
0
static void
test_bt_machine_check_voices (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");

  GST_INFO ("-- act --");
  BtMachine *machine = BT_MACHINE (bt_source_machine_new (song, "gen",
          "buzztrax-test-poly-source", 2L, NULL));

  GST_INFO ("-- assert --");
  GstChildProxy *element =
      (GstChildProxy *) check_gobject_get_object_property (machine, "machine");
  ck_assert_int_eq (gst_child_proxy_get_children_count (element), 2);
  //ck_assert_gobject_gulong_eq(machine,"voices",2);

  GST_INFO ("-- cleanup --");
  gst_object_unref (element);
  BT_TEST_END;
}
Exemple #14
0
gboolean
check_run_main_loop_until_msg_or_error (BtSong * song, const gchar * msg)
{
  GstStateChangeReturn sret;
  GstState state, pending;

  GMainLoop *main_loop = g_main_loop_new (NULL, FALSE);
  GstElement *bin =
      (GstElement *) check_gobject_get_object_property (song, "bin");
  GstBus *bus = gst_element_get_bus (bin);
  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
  g_signal_connect (bus, "message::error", G_CALLBACK (_check_message_received),
      (gpointer) main_loop);
  g_signal_connect (bus, msg,
      G_CALLBACK (_check_message_received), (gpointer) main_loop);

  _check_run_main_loop_error = FALSE;
  sret = gst_element_get_state (bin, &state, &pending, G_GUINT64_CONSTANT (0));

  // be careful to not run this when the song already finished
  if (sret != GST_STATE_CHANGE_FAILURE) {
    GST_INFO_OBJECT (song, "running main_loop: sret=%s, state=%s/%s",
        gst_element_state_change_return_get_name (sret),
        gst_element_state_get_name (state),
        gst_element_state_get_name (pending));
    g_main_loop_run (main_loop);
  } else {
    GST_INFO_OBJECT (song, "skipping main_loop: sret=%s, state=%s/%s",
        gst_element_state_change_return_get_name (sret),
        gst_element_state_get_name (state),
        gst_element_state_get_name (pending));
  }
  gst_bus_remove_signal_watch (bus);
  g_signal_handlers_disconnect_matched (bus, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
      NULL, (gpointer) main_loop);
  gst_object_unref (bus);
  gst_object_unref (bin);
  g_main_loop_unref (main_loop);
  GST_INFO_OBJECT (song, "finished main_loop");
  return sret == GST_STATE_CHANGE_FAILURE ? FALSE : !_check_run_main_loop_error;
}
Exemple #15
0
/*
* In this test case we check the _unique_id function.
*/
static void
test_bt_setup_unique_machine_id1 (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  bt_source_machine_new (song, "src", "buzztrax-test-mono-source", 0, NULL);

  GST_INFO ("-- act --");
  gchar *id = bt_setup_get_unique_machine_id (setup, "src");

  GST_INFO ("-- assert --");
  fail_unless (id != NULL, NULL);
  ck_assert_gobject_eq_and_unref (bt_setup_get_machine_by_id (setup, id), NULL);
  ck_assert_str_ne (id, "src");

  GST_INFO ("-- cleanup --");
  g_free (id);
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #16
0
/*
* In this example you can see, how we get a source machine back by its type.
*/
static void
test_bt_setup_machine_type (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  BtMachine *source = BT_MACHINE (bt_source_machine_new (song, "src",
          "buzztrax-test-mono-source", 0, NULL));

  GST_INFO ("-- act --");
  BtMachine *machine =
      bt_setup_get_machine_by_type (setup, BT_TYPE_SOURCE_MACHINE);

  GST_INFO ("-- assert --");
  fail_unless (machine == source, NULL);

  GST_INFO ("-- cleanup --");
  g_object_unref (machine);
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #17
0
static void
test_bt_song_info_update_tpb (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  GstClockTime t1, t2;
  BtSongInfo *song_info =
      BT_SONG_INFO (check_gobject_get_object_property (song, "song-info"));
  g_object_set (song_info, "tpb", 8, NULL);
  g_object_get (song_info, "tick-duration", &t1, NULL);

  GST_INFO ("-- act --");
  g_object_set (song_info, "tpb", 4, NULL);
  g_object_get (song_info, "tick-duration", &t2, NULL);

  GST_INFO ("-- assert --");
  ck_assert_uint64_eq (t2, t1 + t1);

  GST_INFO ("-- cleanup --");
  g_object_unref (song_info);
  BT_TEST_END;
}
Exemple #18
0
static void
test_bt_setup_machine_add_updates_list (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  BtMachine *source = BT_MACHINE (bt_source_machine_new (song, "src",
          "buzztrax-test-mono-source", 0, NULL));

  GST_INFO ("-- act --");
  GList *list = (GList *) check_gobject_get_ptr_property (setup, "machines");

  GST_INFO ("-- assert --");
  fail_unless (list != NULL, NULL);
  ck_assert_int_eq (g_list_length (list), 1);
  fail_unless ((BtMachine *) list->data == source, NULL);

  GST_INFO ("-- cleanup --");
  g_list_free (list);
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #19
0
static void
test_bt_setup_wire_rem_machine_id (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  BtMachine *source = BT_MACHINE (bt_source_machine_new (song, "src",
          "buzztrax-test-mono-source", 0, NULL));
  BtMachine *sink = BT_MACHINE (bt_sink_machine_new (song, "sink", NULL));
  BtWire *wire = bt_wire_new (song, source, sink, NULL);

  GST_INFO ("-- act --");
  bt_setup_remove_wire (setup, wire);

  GST_INFO ("-- assert --");
  ck_assert_gobject_eq_and_unref (bt_setup_get_wire_by_src_machine (setup,
          source), NULL);

  GST_INFO ("-- cleanup --");
  g_object_unref (setup);
  BT_TEST_END;
}
Exemple #20
0
/* test master volume, using appsink? */
static void
test_bt_sink_bin_master_volume (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  gdouble volume = 1.0 / (gdouble) _i;
  g_object_set (settings, "audiosink", "fakesink", NULL);
  make_new_song ( /*square */ 1);
  BtMachine *machine =
      bt_setup_get_machine_by_type (setup, BT_TYPE_SINK_MACHINE);
  GstElement *sink_bin =
      GST_ELEMENT (check_gobject_get_object_property (machine, "machine"));
  BtParameterGroup *pg = bt_machine_get_global_param_group (machine);
  gst_element_set_state (sink_bin, GST_STATE_READY);
  GstElement *fakesink = get_sink_element ((GstBin *) sink_bin);
  g_object_set (fakesink, "signal-handoffs", TRUE, NULL);
  g_signal_connect (fakesink, "preroll-handoff", (GCallback) handoff_buffer_cb,
      NULL);
  g_signal_connect (fakesink, "handoff", (GCallback) handoff_buffer_cb, NULL);

  GST_INFO ("-- act --");
  g_object_set (sink_bin, "master-volume", volume, NULL);
  bt_parameter_group_set_param_default (pg,
      bt_parameter_group_get_param_index (pg, "master-volume"));
  bt_song_play (song);
  run_main_loop_until_eos ();

  GST_INFO ("-- assert --");
  GST_INFO ("minv=%7.4lf, maxv=%7.4lf", minv, maxv);
  ck_assert_float_eq (maxv, +volume);
  ck_assert_float_eq (minv, -volume);

  GST_INFO ("-- cleanup --");
  bt_song_stop (song);
  gst_object_unref (sink_bin);
  g_object_try_unref (machine);
  BT_TEST_END;
}
Exemple #21
0
static void
test_bt_machine_set_defaults (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtMachine *machine = BT_MACHINE (bt_source_machine_new (song, "id",
          "buzztrax-test-mono-source", 0, NULL));
  GstObject *element =
      (GstObject *) check_gobject_get_object_property (machine, "machine");
  GstControlBinding *cb = gst_object_get_control_binding (element, "g-uint");
  g_object_set (element, "g-uint", 10, NULL);

  GST_INFO ("-- act --");
  bt_machine_set_param_defaults (machine);

  GST_INFO ("-- assert --");
  GValue *val = gst_control_binding_get_value (cb, G_GUINT64_CONSTANT (0));
  guint uval = g_value_get_uint (val);
  ck_assert_int_eq (uval, 10);

  GST_INFO ("-- cleanup --");
  gst_object_unref (element);
  BT_TEST_END;
}
Exemple #22
0
static void
test_bt_setup_wire_add_dst_list (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtSetup *setup = BT_SETUP (check_gobject_get_object_property (song, "setup"));
  BtMachine *source = BT_MACHINE (bt_source_machine_new (song, "src",
          "buzztrax-test-mono-source", 0, NULL));
  BtMachine *sink = BT_MACHINE (bt_sink_machine_new (song, "sink", NULL));
  BtWire *wire = bt_wire_new (song, source, sink, NULL);

  GST_INFO ("-- act --");
  GList *list = bt_setup_get_wires_by_dst_machine (setup, sink);

  GST_INFO ("-- assert --");
  fail_unless (list != NULL, NULL);
  ck_assert_int_eq (g_list_length (list), 1);
  ck_assert_gobject_eq_and_unref (BT_WIRE (g_list_first (list)->data), wire);

  GST_INFO ("-- cleanup --");
  g_list_free (list);
  g_object_unref (setup);
  BT_TEST_END;
}