tests: rtpjitterbuffer: test cleanups/improvements

Use fail_unless and friends instead of g_assert
Factor seq-num checking out to separate function
Check more return-values from push and crank and others

https://bugzilla.gnome.org/show_bug.cgi?id=762254
This commit is contained in:
Havard Graff 2016-02-18 10:27:19 +01:00 committed by Tim-Philipp Müller
parent fb4c2909ca
commit d52765fabb

View file

@ -447,6 +447,17 @@ generate_test_buffer (guint seq_num)
TRUE, seq_num, seq_num * PCMU_RTP_TS_DURATION); TRUE, seq_num, seq_num * PCMU_RTP_TS_DURATION);
} }
static gint
get_rtp_seq_num (GstBuffer * buf)
{
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
gint seq;
gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
seq = gst_rtp_buffer_get_seq (&rtp);
gst_rtp_buffer_unmap (&rtp);
return seq;
}
static GstFlowReturn static GstFlowReturn
test_sink_pad_chain_cb (GstPad * pad, GstObject * parent, GstBuffer * buffer) test_sink_pad_chain_cb (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{ {
@ -602,19 +613,20 @@ verify_lost_event (GstEvent * event, guint32 expected_seqnum,
GstClockTime timestamp; GstClockTime timestamp;
GstClockTime duration; GstClockTime duration;
g_assert (gst_structure_get_uint (s, "seqnum", &seqnum)); fail_unless (event != NULL);
fail_unless (gst_structure_get_uint (s, "seqnum", &seqnum));
value = gst_structure_get_value (s, "timestamp"); value = gst_structure_get_value (s, "timestamp");
g_assert (value && G_VALUE_HOLDS_UINT64 (value)); g_assert (value && G_VALUE_HOLDS_UINT64 (value));
timestamp = g_value_get_uint64 (value); timestamp = g_value_get_uint64 (value);
value = gst_structure_get_value (s, "duration"); value = gst_structure_get_value (s, "duration");
g_assert (value && G_VALUE_HOLDS_UINT64 (value)); fail_unless (value && G_VALUE_HOLDS_UINT64 (value));
duration = g_value_get_uint64 (value); duration = g_value_get_uint64 (value);
fail_unless_equals_int (seqnum, expected_seqnum); fail_unless_equals_int (expected_seqnum, seqnum);
fail_unless_equals_int (timestamp, expected_timestamp); fail_unless_equals_int (expected_timestamp, timestamp);
fail_unless_equals_int (duration, expected_duration); fail_unless_equals_int (expected_duration, duration);
gst_event_unref (event); gst_event_unref (event);
} }
@ -630,24 +642,25 @@ verify_rtx_event (GstEvent * event, guint32 expected_seqnum,
GstClockTime timestamp, spacing; GstClockTime timestamp, spacing;
guint delay; guint delay;
g_assert (gst_structure_get_uint (s, "seqnum", &seqnum)); fail_unless (event);
fail_unless (gst_structure_get_uint (s, "seqnum", &seqnum));
value = gst_structure_get_value (s, "running-time"); value = gst_structure_get_value (s, "running-time");
g_assert (value && G_VALUE_HOLDS_UINT64 (value)); fail_unless (value && G_VALUE_HOLDS_UINT64 (value));
timestamp = g_value_get_uint64 (value); timestamp = g_value_get_uint64 (value);
value = gst_structure_get_value (s, "delay"); value = gst_structure_get_value (s, "delay");
g_assert (value && G_VALUE_HOLDS_UINT (value)); fail_unless (value && G_VALUE_HOLDS_UINT (value));
delay = g_value_get_uint (value); delay = g_value_get_uint (value);
value = gst_structure_get_value (s, "packet-spacing"); value = gst_structure_get_value (s, "packet-spacing");
g_assert (value && G_VALUE_HOLDS_UINT64 (value)); fail_unless (value && G_VALUE_HOLDS_UINT64 (value));
spacing = g_value_get_uint64 (value); spacing = g_value_get_uint64 (value);
g_assert_cmpint (seqnum, ==, expected_seqnum); fail_unless_equals_int (expected_seqnum, seqnum);
g_assert_cmpint (timestamp, ==, expected_timestamp); fail_unless_equals_int (expected_timestamp, timestamp);
g_assert_cmpint (delay, ==, expected_delay); fail_unless_equals_int (expected_delay, delay);
g_assert_cmpint (spacing, ==, expected_spacing); fail_unless_equals_int (expected_spacing, spacing);
gst_event_unref (event); gst_event_unref (event);
} }
@ -661,15 +674,14 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps)
GstEvent *out_event; GstEvent *out_event;
gint jb_latency_ms = 200; gint jb_latency_ms = 200;
gint num_lost_events = jb_latency_ms / PCMU_BUF_MS; gint num_lost_events = jb_latency_ms / PCMU_BUF_MS;
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
gst_harness_use_testclock (h);
testclock = gst_harness_get_testclock (h); testclock = gst_harness_get_testclock (h);
g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL); g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
/* push the first buffer in */ /* push the first buffer in */
gst_harness_push (h, generate_test_buffer (0)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (0)));
/* wait for the first buffer to be synced to timestamp + latency */ /* wait for the first buffer to be synced to timestamp + latency */
gst_test_clock_wait_for_next_pending_id (testclock, &id); gst_test_clock_wait_for_next_pending_id (testclock, &id);
@ -683,9 +695,8 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps)
/* check for the buffer coming out that was pushed in */ /* check for the buffer coming out that was pushed in */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless_equals_uint64 (0, GST_BUFFER_DTS (out_buf));
g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, 0); fail_unless_equals_uint64 (0, GST_BUFFER_PTS (out_buf));
g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, 0);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
/* move time ahead to just before 10 seconds */ /* move time ahead to just before 10 seconds */
@ -695,10 +706,11 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps)
fail_unless_equals_int (0, gst_test_clock_peek_id_count (testclock)); fail_unless_equals_int (0, gst_test_clock_peek_id_count (testclock));
/* a buffer now arrives perfectly on time */ /* a buffer now arrives perfectly on time */
gst_harness_push (h, generate_test_buffer (500)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (500)));
/* release the wait, advancing the clock to 10 sec */ /* release the wait, advancing the clock to 10 sec */
gst_harness_crank_single_clock_wait (h); fail_unless (gst_harness_crank_single_clock_wait (h));
/* drop GstEventStreamStart & GstEventCaps & GstEventSegment */ /* drop GstEventStreamStart & GstEventCaps & GstEventSegment */
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -706,35 +718,29 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps)
/* we should now receive a packet-lost-event for buffers 1 through 489 ... */ /* we should now receive a packet-lost-event for buffers 1 through 489 ... */
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 1, 1 * PCMU_BUF_DURATION, verify_lost_event (out_event, 1, 1 * PCMU_BUF_DURATION,
PCMU_BUF_DURATION * 489); PCMU_BUF_DURATION * 489);
/* ... as well as 490 (since at 10 sec 490 is too late) */ /* ... as well as 490 (since at 10 sec 490 is too late) */
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 490, 490 * PCMU_BUF_DURATION, verify_lost_event (out_event, 490, 490 * PCMU_BUF_DURATION,
PCMU_BUF_DURATION); PCMU_BUF_DURATION);
/* we get as many lost events as the the number of * /* we get as many lost events as the the number of *
* buffers the jitterbuffer is able to wait for */ * buffers the jitterbuffer is able to wait for */
for (int i = 1; i < num_lost_events; i++) { for (int i = 1; i < num_lost_events; i++) {
gst_harness_crank_single_clock_wait (h); fail_unless (gst_harness_crank_single_clock_wait (h));
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 490 + i, (490 + i) * PCMU_BUF_DURATION, verify_lost_event (out_event, 490 + i, (490 + i) * PCMU_BUF_DURATION,
PCMU_BUF_DURATION); PCMU_BUF_DURATION);
} }
/* and then the buffer is released */ /* and then the buffer is released */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT));
g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); fail_unless_equals_int (500, get_rtp_seq_num (out_buf));
gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); fail_unless_equals_uint64 (10 * GST_SECOND, GST_BUFFER_DTS (out_buf));
g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 500); fail_unless_equals_uint64 (10 * GST_SECOND, GST_BUFFER_PTS (out_buf));
gst_rtp_buffer_unmap (&rtp);
g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, (10 * GST_SECOND));
g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, (10 * GST_SECOND));
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
gst_object_unref (testclock); gst_object_unref (testclock);
@ -753,30 +759,29 @@ GST_START_TEST (test_two_lost_one_arrives_in_time)
gint jb_latency_ms = 100; /* FIXME: setting this to 10 produces a gint jb_latency_ms = 100; /* FIXME: setting this to 10 produces a
* strange result (30ms lost event), * strange result (30ms lost event),
* find out why! */ * find out why! */
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
GstClockTime buffer_time; GstClockTime buffer_time;
gint b; gint b;
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
gst_harness_use_testclock (h);
testclock = gst_harness_get_testclock (h); testclock = gst_harness_get_testclock (h);
g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL); g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
/* push the first buffer through */ /* push the first buffer through */
gst_harness_push (h, generate_test_buffer (0)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_crank_single_clock_wait (h); gst_harness_push (h, generate_test_buffer (0)));
fail_unless (gst_harness_crank_single_clock_wait (h));
gst_buffer_unref (gst_harness_pull (h)); gst_buffer_unref (gst_harness_pull (h));
/* push some buffers arriving in perfect time! */ /* push some buffers arriving in perfect time! */
for (b = 1; b < 3; b++) { for (b = 1; b < 3; b++) {
buffer_time = b * PCMU_BUF_DURATION; buffer_time = b * PCMU_BUF_DURATION;
gst_harness_push (h, generate_test_buffer (b)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (b)));
/* check for the buffer coming out that was pushed in */ /* check for the buffer coming out that was pushed in */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless_equals_uint64 (buffer_time, GST_BUFFER_DTS (out_buf));
g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, buffer_time); fail_unless_equals_uint64 (buffer_time, GST_BUFFER_PTS (out_buf));
g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, buffer_time);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
} }
@ -789,12 +794,13 @@ GST_START_TEST (test_two_lost_one_arrives_in_time)
/* the first lost buffer (buffer 3) out on /* the first lost buffer (buffer 3) out on
* (buffer-timestamp (60) + latency (100) = 160) */ * (buffer-timestamp (60) + latency (100) = 160) */
gst_test_clock_wait_for_next_pending_id (testclock, &id); gst_test_clock_wait_for_next_pending_id (testclock, &id);
g_assert_cmpint (gst_clock_id_get_time (id), ==, fail_unless_equals_uint64 (
(3 * PCMU_BUF_DURATION) + (jb_latency_ms * GST_MSECOND)); 3 * PCMU_BUF_DURATION + jb_latency_ms * GST_MSECOND,
gst_clock_id_get_time (id));
gst_clock_id_unref (id); gst_clock_id_unref (id);
/* let the time expire... */ /* let the time expire... */
gst_harness_crank_single_clock_wait (h); fail_unless (gst_harness_crank_single_clock_wait (h));
/* drop GstEventStreamStart & GstEventCaps & GstEventSegment */ /* drop GstEventStreamStart & GstEventCaps & GstEventSegment */
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -802,30 +808,24 @@ GST_START_TEST (test_two_lost_one_arrives_in_time)
/* we should now receive a packet-lost-event for buffer 3 */ /* we should now receive a packet-lost-event for buffer 3 */
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 3, 3 * PCMU_BUF_DURATION, PCMU_BUF_DURATION); verify_lost_event (out_event, 3, 3 * PCMU_BUF_DURATION, PCMU_BUF_DURATION);
/* buffer 4 now arrives just in time (time is 70, buffer 4 expires at 90) */ /* buffer 4 now arrives just in time (time is 70, buffer 4 expires at 90) */
b = 4; b = 4;
buffer_time = b * PCMU_BUF_DURATION; buffer_time = b * PCMU_BUF_DURATION;
gst_harness_push (h, generate_test_buffer (b)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (b)));
/* verify that buffer 4 made it through! */ /* verify that buffer 4 made it through! */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT));
g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); fail_unless_equals_int (4, get_rtp_seq_num (out_buf));
gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp);
g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 4);
gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
/* and see that buffer 5 now arrives in a normal fashion */ /* and see that buffer 5 now arrives in a normal fashion */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless (!GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT));
g_assert (!GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); fail_unless_equals_int (5, get_rtp_seq_num (out_buf));
gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp);
g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 5);
gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
gst_object_unref (testclock); gst_object_unref (testclock);
@ -841,12 +841,10 @@ GST_START_TEST (test_late_packets_still_makes_lost_events)
GstBuffer *out_buf; GstBuffer *out_buf;
GstEvent *out_event; GstEvent *out_event;
gint jb_latency_ms = 100; gint jb_latency_ms = 100;
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
GstClockTime buffer_time; GstClockTime buffer_time;
gint b; gint b;
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
gst_harness_use_testclock (h);
testclock = gst_harness_get_testclock (h); testclock = gst_harness_get_testclock (h);
g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL); g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
@ -859,20 +857,21 @@ GST_START_TEST (test_late_packets_still_makes_lost_events)
/* push some buffers arriving in perfect time! */ /* push some buffers arriving in perfect time! */
for (b = 1; b < 3; b++) { for (b = 1; b < 3; b++) {
buffer_time = b * PCMU_BUF_DURATION; buffer_time = b * PCMU_BUF_DURATION;
gst_harness_push (h, generate_test_buffer (b)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (b)));
/* check for the buffer coming out that was pushed in */ /* check for the buffer coming out that was pushed in */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless_equals_uint64 (buffer_time, GST_BUFFER_DTS (out_buf));
g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, buffer_time); fail_unless_equals_uint64 (buffer_time, GST_BUFFER_PTS (out_buf));
g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, buffer_time);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
} }
/* hop over 2 packets and make another one (gap of 2) */ /* hop over 2 packets and make another one (gap of 2) */
b = 5; b = 5;
buffer_time = b * PCMU_BUF_DURATION; buffer_time = b * PCMU_BUF_DURATION;
gst_harness_push (h, generate_test_buffer (b)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h, generate_test_buffer (b)));
/* drop GstEventStreamStart & GstEventCaps & GstEventSegment */ /* drop GstEventStreamStart & GstEventCaps & GstEventSegment */
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -880,19 +879,14 @@ GST_START_TEST (test_late_packets_still_makes_lost_events)
/* we should now receive packet-lost-events for buffer 3 and 4 */ /* we should now receive packet-lost-events for buffer 3 and 4 */
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 3, 3 * PCMU_BUF_DURATION, PCMU_BUF_DURATION); verify_lost_event (out_event, 3, 3 * PCMU_BUF_DURATION, PCMU_BUF_DURATION);
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 4, 4 * PCMU_BUF_DURATION, PCMU_BUF_DURATION); verify_lost_event (out_event, 4, 4 * PCMU_BUF_DURATION, PCMU_BUF_DURATION);
/* verify that buffer 5 made it through! */ /* verify that buffer 5 made it through! */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT));
g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); fail_unless_equals_int (5, get_rtp_seq_num (out_buf));
gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp);
g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 5);
gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
gst_object_unref (testclock); gst_object_unref (testclock);
@ -908,11 +902,9 @@ GST_START_TEST (test_all_packets_are_timestamped_zero)
GstBuffer *out_buf; GstBuffer *out_buf;
GstEvent *out_event; GstEvent *out_event;
gint jb_latency_ms = 100; gint jb_latency_ms = 100;
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
gint b; gint b;
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
gst_harness_use_testclock (h);
testclock = gst_harness_get_testclock (h); testclock = gst_harness_get_testclock (h);
g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL); g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
@ -924,20 +916,22 @@ GST_START_TEST (test_all_packets_are_timestamped_zero)
/* push some buffers in, all timestamped 0 */ /* push some buffers in, all timestamped 0 */
for (b = 1; b < 3; b++) { for (b = 1; b < 3; b++) {
gst_harness_push (h, generate_test_buffer_full (0 * GST_MSECOND, TRUE, b, fail_unless_equals_int (GST_FLOW_OK,
0)); gst_harness_push (h,
generate_test_buffer_full (0 * GST_MSECOND, TRUE, b, 0)));
/* check for the buffer coming out that was pushed in */ /* check for the buffer coming out that was pushed in */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless_equals_uint64 (0, GST_BUFFER_DTS (out_buf));
g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, 0); fail_unless_equals_uint64 (0, GST_BUFFER_PTS (out_buf));
g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, 0);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
} }
/* hop over 2 packets and make another one (gap of 2) */ /* hop over 2 packets and make another one (gap of 2) */
b = 5; b = 5;
gst_harness_push (h, generate_test_buffer_full (0 * GST_MSECOND, TRUE, b, 0)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_push (h,
generate_test_buffer_full (0 * GST_MSECOND, TRUE, b, 0)));
/* drop GstEventStreamStart & GstEventCaps & GstEventSegment */ /* drop GstEventStreamStart & GstEventCaps & GstEventSegment */
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -945,19 +939,14 @@ GST_START_TEST (test_all_packets_are_timestamped_zero)
/* we should now receive packet-lost-events for buffer 3 and 4 */ /* we should now receive packet-lost-events for buffer 3 and 4 */
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 3, 0, 0); verify_lost_event (out_event, 3, 0, 0);
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
g_assert (out_event != NULL);
verify_lost_event (out_event, 4, 0, 0); verify_lost_event (out_event, 4, 0, 0);
/* verify that buffer 5 made it through! */ /* verify that buffer 5 made it through! */
out_buf = gst_harness_pull (h); out_buf = gst_harness_pull (h);
g_assert (out_buf != NULL); fail_unless (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT));
g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); fail_unless_equals_int (5, get_rtp_seq_num (out_buf));
gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp);
g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 5);
gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (out_buf); gst_buffer_unref (out_buf);
gst_object_unref (testclock); gst_object_unref (testclock);
@ -1643,18 +1632,19 @@ GST_START_TEST (test_dts_gap_larger_than_latency)
GstClockTime dts_after_gap = (jb_latency_ms + 1) * GST_MSECOND; GstClockTime dts_after_gap = (jb_latency_ms + 1) * GST_MSECOND;
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
gst_harness_use_testclock (h);
testclock = gst_harness_get_testclock (h); testclock = gst_harness_get_testclock (h);
g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL); g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
/* push first buffer through */ /* push first buffer through */
gst_harness_push (h, generate_test_buffer (0)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_crank_single_clock_wait (h); gst_harness_push (h, generate_test_buffer (0)));
fail_unless (gst_harness_crank_single_clock_wait (h));
gst_buffer_unref (gst_harness_pull (h)); gst_buffer_unref (gst_harness_pull (h));
/* Push packet with DTS larger than latency */ /* Push packet with DTS larger than latency */
gst_harness_push (h, generate_test_buffer_full (dts_after_gap, fail_unless_equals_int (GST_FLOW_OK,
TRUE, 5, 5 * PCMU_RTP_TS_DURATION)); gst_harness_push (h, generate_test_buffer_full (dts_after_gap,
TRUE, 5, 5 * PCMU_RTP_TS_DURATION)));
/* drop GstEventStreamStart & GstEventCaps & GstEventSegment */ /* drop GstEventStreamStart & GstEventCaps & GstEventSegment */
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -1663,9 +1653,8 @@ GST_START_TEST (test_dts_gap_larger_than_latency)
/* Time out and verify lost events */ /* Time out and verify lost events */
for (gint i = 1; i < 5; i++) { for (gint i = 1; i < 5; i++) {
GstClockTime dur = dts_after_gap / 5; GstClockTime dur = dts_after_gap / 5;
gst_harness_crank_single_clock_wait (h); fail_unless (gst_harness_crank_single_clock_wait (h));
out_event = gst_harness_pull_event (h); out_event = gst_harness_pull_event (h);
fail_unless (out_event != NULL);
verify_lost_event (out_event, i, i * dur, dur); verify_lost_event (out_event, i, i * dur, dur);
} }
@ -1678,29 +1667,44 @@ GST_END_TEST;
GST_START_TEST (test_push_big_gap) GST_START_TEST (test_push_big_gap)
{ {
GstHarness *h = gst_harness_new ("rtpjitterbuffer"); GstHarness *h = gst_harness_new ("rtpjitterbuffer");
GstBuffer * buf;
const gint num_consecutive = 5; const gint num_consecutive = 5;
gint i; gint i;
gst_harness_use_testclock (h);
gst_harness_set_src_caps (h, generate_caps ()); gst_harness_set_src_caps (h, generate_caps ());
for (i = 0; i < num_consecutive; i++) for (i = 0; i < num_consecutive; i++)
gst_harness_push (h, generate_test_buffer (1000 + i)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_crank_single_clock_wait (h); gst_harness_push (h, generate_test_buffer (1000 + i)));
for (i = 0; i < num_consecutive; i++)
gst_buffer_unref (gst_harness_pull (h)); fail_unless (gst_harness_crank_single_clock_wait (h));
for (i = 0; i < num_consecutive; i++) {
GstBuffer * buf = gst_harness_pull (h);
fail_unless_equals_int (1000 + i, get_rtp_seq_num (buf));
gst_buffer_unref (buf);
}
/* Push more packets from a different sequence number domain /* Push more packets from a different sequence number domain
* to trigger "big gap" logic. */ * to trigger "big gap" logic. */
for (i = 0; i < num_consecutive; i++) for (i = 0; i < num_consecutive; i++)
gst_harness_push (h, generate_test_buffer (20000 + i)); fail_unless_equals_int (GST_FLOW_OK,
gst_harness_crank_single_clock_wait (h); gst_harness_push (h, generate_test_buffer (20000 + i)));
for (i = 0; i < num_consecutive; i++)
gst_buffer_unref (gst_harness_pull (h)); fail_unless (gst_harness_crank_single_clock_wait (h));
for (i = 0; i < num_consecutive; i++) {
GstBuffer * buf = gst_harness_pull (h);
fail_unless_equals_int (20000 + i, get_rtp_seq_num (buf));
gst_buffer_unref (buf);
}
/* Final buffer should be pushed straight through */ /* Final buffer should be pushed straight through */
gst_harness_push (h, generate_test_buffer (20000 + num_consecutive)); fail_unless_equals_int (GST_FLOW_OK,
gst_buffer_unref (gst_harness_pull (h)); gst_harness_push (h, generate_test_buffer (20000 + num_consecutive)));
buf = gst_harness_pull (h);
fail_unless_equals_int (20000 + num_consecutive, get_rtp_seq_num (buf));
gst_buffer_unref (buf);
gst_harness_teardown (h); gst_harness_teardown (h);
} }