Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
George Kiagiadakis
gst-plugins-good
Commits
9068e1bb
Commit
9068e1bb
authored
May 04, 2014
by
Jason Litzinger
Committed by
Wim Taymans
May 09, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new test case.
parent
5c90f17c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
123 additions
and
5 deletions
+123
-5
gst/rtpmanager/gstrtpjitterbuffer.c
gst/rtpmanager/gstrtpjitterbuffer.c
+3
-2
tests/check/elements/rtpjitterbuffer.c
tests/check/elements/rtpjitterbuffer.c
+120
-3
No files found.
gst/rtpmanager/gstrtpjitterbuffer.c
View file @
9068e1bb
...
...
@@ -2299,8 +2299,9 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
}
}
GST_DEBUG_OBJECT
(
jitterbuffer
,
"Pushed packet #%d, now %d packets, head: %d"
,
seqnum
,
rtp_jitter_buffer_num_packets
(
priv
->
jbuf
),
head
);
GST_DEBUG_OBJECT
(
jitterbuffer
,
"Pushed packet #%d, now %d packets, head: %d, "
"percent %d"
,
seqnum
,
rtp_jitter_buffer_num_packets
(
priv
->
jbuf
),
head
,
percent
);
msg
=
check_buffering_percent
(
jitterbuffer
,
percent
);
...
...
tests/check/elements/rtpjitterbuffer.c
View file @
9068e1bb
...
...
@@ -654,7 +654,6 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps)
setup_testharness
(
&
data
);
g_object_set
(
data
.
jitter_buffer
,
"latency"
,
jb_latency_ms
,
NULL
);
/* push the first buffer in */
in_buf
=
generate_test_buffer
(
0
*
GST_MSECOND
,
TRUE
,
0
,
0
);
gst_test_clock_set_time
(
GST_TEST_CLOCK
(
data
.
clock
),
0
);
...
...
@@ -1253,8 +1252,6 @@ GST_START_TEST (test_rtx_packet_delay)
g_object_set
(
data
.
jitter_buffer
,
"latency"
,
jb_latency_ms
,
NULL
);
g_object_set
(
data
.
jitter_buffer
,
"rtx-retry-period"
,
120
,
NULL
);
gst_test_clock_set_time
(
GST_TEST_CLOCK
(
data
.
clock
),
0
);
/* push the first buffer in */
in_buf
=
generate_test_buffer
(
0
*
GST_MSECOND
,
TRUE
,
0
,
0
);
GST_BUFFER_FLAG_SET
(
in_buf
,
GST_BUFFER_FLAG_DISCONT
);
...
...
@@ -1399,6 +1396,125 @@ GST_START_TEST (test_rtx_packet_delay)
GST_END_TEST
;
GST_START_TEST
(
test_gap_exceeds_latency
)
{
TestData
data
;
GstBuffer
*
in_buf
,
*
out_buf
;
GstClockID
id
,
tid
;
GstEvent
*
out_event
;
guint32
timestamp_ms
=
0
;
guint32
last_ts
=
0
;
gint
jb_latency_ms
=
200
;
guint32
rtp_ts
=
0
;
guint32
last_rtp
=
0
;
const
GstStructure
*
s
=
NULL
;
guint32
seqnum
=
0
;
setup_testharness
(
&
data
);
g_object_set
(
data
.
jitter_buffer
,
"do-retransmission"
,
TRUE
,
NULL
);
g_object_set
(
data
.
jitter_buffer
,
"latency"
,
jb_latency_ms
,
NULL
);
g_object_set
(
data
.
jitter_buffer
,
"rtx-retry-period"
,
120
,
NULL
);
gst_test_clock_set_time
(
GST_TEST_CLOCK
(
data
.
clock
),
0
);
in_buf
=
generate_test_buffer
(
timestamp_ms
*
GST_MSECOND
,
TRUE
,
0
,
rtp_ts
);
GST_BUFFER_FLAG_SET
(
in_buf
,
GST_BUFFER_FLAG_DISCONT
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
timestamp_ms
+=
20
;
rtp_ts
+=
160
;
gst_test_clock_set_time
(
GST_TEST_CLOCK
(
data
.
clock
),
timestamp_ms
*
GST_MSECOND
);
in_buf
=
generate_test_buffer
(
timestamp_ms
*
GST_MSECOND
,
TRUE
,
1
,
rtp_ts
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_rtp
=
rtp_ts
;
last_ts
=
timestamp_ms
;
/* Allow seqnum 2 to be declared lost */
do
{
out_event
=
g_async_queue_try_pop
(
data
.
sink_event_queue
);
if
(
!
out_event
)
{
if
(
gst_test_clock_peek_next_pending_id
(
GST_TEST_CLOCK
(
data
.
clock
),
&
id
))
{
GstClockTime
t
=
gst_clock_id_get_time
(
id
);
if
(
t
>
gst_clock_get_time
(
data
.
clock
))
{
gst_test_clock_set_time
(
GST_TEST_CLOCK
(
data
.
clock
),
t
);
}
tid
=
gst_test_clock_process_next_clock_id
(
GST_TEST_CLOCK
(
data
.
clock
));
gst_clock_id_unref
(
id
);
gst_clock_id_unref
(
tid
);
}
}
}
while
(
!
out_event
);
out_buf
=
g_async_queue_pop
(
data
.
buf_queue
);
gst_buffer_unref
(
out_buf
);
out_buf
=
g_async_queue_pop
(
data
.
buf_queue
);
gst_buffer_unref
(
out_buf
);
timestamp_ms
+=
(
20
*
15
);
s
=
gst_event_get_structure
(
out_event
);
g_assert
(
gst_structure_get_uint
(
s
,
"seqnum"
,
&
seqnum
));
g_assert_cmpint
(
seqnum
,
==
,
2
);
gst_event_unref
(
out_event
);
/* Now data comes in again, a "bulk" lost packet is created for 3 -> 6 */
rtp_ts
+=
(
160
*
15
);
in_buf
=
generate_test_buffer
(
timestamp_ms
*
GST_MSECOND
,
TRUE
,
16
,
rtp_ts
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
60
;
last_rtp
+=
480
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
8
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
9
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
10
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
11
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
12
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
13
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
14
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
last_ts
+=
20
;
last_rtp
+=
160
;
in_buf
=
generate_test_buffer
(
last_ts
*
GST_MSECOND
,
TRUE
,
15
,
last_rtp
);
g_assert_cmpint
(
gst_pad_push
(
data
.
test_src_pad
,
in_buf
),
==
,
GST_FLOW_OK
);
/* Wait for data to be pushed, it won't be at this time due to an off by one error. */
out_buf
=
g_async_queue_pop
(
data
.
buf_queue
);
destroy_testharness
(
&
data
);
}
GST_END_TEST
;
static
Suite
*
rtpjitterbuffer_suite
(
void
)
{
...
...
@@ -1418,6 +1534,7 @@ rtpjitterbuffer_suite (void)
tcase_add_test
(
tc_chain
,
test_rtx_expected_next
);
tcase_add_test
(
tc_chain
,
test_rtx_two_missing
);
tcase_add_test
(
tc_chain
,
test_rtx_packet_delay
);
tcase_add_test
(
tc_chain
,
test_gap_exceeds_latency
);
return
s
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment