Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
jami-daemon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
savoirfairelinux
jami-daemon
Commits
ad0e5c23
Commit
ad0e5c23
authored
14 years ago
by
Alexandre Savard
Browse files
Options
Downloads
Patches
Plain Diff
[#2530] Use fixed jitter buffering for now
parent
c9f06f22
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
sflphone-common/src/audio/audiortp/AudioRtpSession.h
+29
-11
29 additions, 11 deletions
sflphone-common/src/audio/audiortp/AudioRtpSession.h
sflphone-common/src/audio/jitterbuf.cpp
+38
-33
38 additions, 33 deletions
sflphone-common/src/audio/jitterbuf.cpp
with
67 additions
and
44 deletions
sflphone-common/src/audio/audiortp/AudioRtpSession.h
+
29
−
11
View file @
ad0e5c23
...
...
@@ -680,39 +680,57 @@ namespace sfl {
jb_frame
frame
;
_jbuffer
->
info
.
conf
.
resync_threshold
=
0
;
if
(
adu
)
{
if
(
_jbuffer
->
frames
)
{
// _debug("_jbuffer->frames->prev->ts %d, _jbuffer->frames->ts %d", _jbuffer->frames->prev->ts, _jbuffer->frames->ts);
// _debug("_jbuffer->info.conf.max_jitterbuf %d", _jbuffer->info.conf.max_jitterbuf);
}
// _debug("PUT_DATA: _ts %d, _currentTime %d", _ts, _currentTime);
spkrDataIn
=
(
unsigned
char
*
)
adu
->
getData
();
// data in char
size
=
adu
->
getSize
();
// size in char
result
=
jb_put
(
_jbuffer
,
spkrDataIn
,
JB_TYPE_VOICE
,
_packetLength
,
_ts
+=
20
,
_currentTime
);
// result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength);
/*
switch(result) {
case JB_OK: printf("JB_OK\n"); break;
case JB_EMPTY: printf("JB_EMPTY\n"); break;
case JB_NOFRAME: printf("JB_NOFRAME\n"); break;
case JB_INTERP: printf("JB_INTERP\n"); break;
case JB_DROP: printf("JB_DROP\n"); break;
case JB_SCHED: printf("JB_SCHED\n"); break;
default: printf("Unknown returned value\n"); break;
}
*/
}
else
{
_debug
(
"No RTP packet available !!!!!!!!!!!!!!!!!!!!!!!
\n
"
);
}
// _debug("GET_DATA: _currentTime %d", _currentTime);
result
=
jb_get
(
_jbuffer
,
&
frame
,
_currentTime
+=
20
,
_packetLength
);
/*
switch(result) {
case 0: printf("You\'ve got frame!\n"); break;
case 1: printf("Here\'s an audio frame you should just drop. Ask me again for this time..\n"); break;
case 2: printf("There\'s no frame scheduled for this time.\n"); break;
case 3: printf("Please interpolate an interpl-length frame for this time (either we need to grow, or there was a lost frame)\n"); break;
case 4: printf("Empty\n"); break;
case JB_OK: printf("JB_OK\n"); break;
case JB_EMPTY: printf("JB_EMPTY\n"); break;
case JB_NOFRAME: printf("JB_NOFRAME\n"); break;
case JB_INTERP: printf("JB_INTERP\n"); break;
case JB_DROP: printf("JB_DROP\n"); break;
case JB_SCHED: printf("JB_SCHED\n"); break;
default: printf("Unknown returned value\n"); break;
}
*/
// _debug("packetMisorder %d", static_cast<D*>(this)->getMaxPacketMisorder());
// DTMF over RTP, size must be over 4 in order to process it as voice data
if
(
size
>
4
)
{
// processDataDecode(spkrDataIn, size);
if
(
result
==
0
)
{
processDataDecode
((
unsigned
char
*
)(
frame
.
data
),
160
);
}
else
{
_debug
(
"bad data"
);
}
}
else
{
// _debug("RTP: Received an RTP event with payload: %d", adu->getType());
...
...
This diff is collapsed.
Click to expand it.
sflphone-common/src/audio/jitterbuf.cpp
+
38
−
33
View file @
ad0e5c23
...
...
@@ -28,10 +28,13 @@
*/
#include
"jitterbuf.h"
#include
<string.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
"global.h"
/*! define these here, just for ancient compiler systems */
#define JB_LONGMAX 2147483647L
#define JB_LONGMIN (-JB_LONGMAX - 1L)
...
...
@@ -258,14 +261,14 @@ static void history_calc_maxbuf(jitterbuf *jb)
if
(
0
)
{
int
k
;
fprintf
(
stderr
,
"toins = %ld
\n
"
,
toins
);
fprintf
(
stderr
,
"maxbuf ="
);
_debug
(
"toins = %ld
\n
"
,
toins
);
_debug
(
"maxbuf ="
);
for
(
k
=
0
;
k
<
JB_HISTORY_MAXBUF_SZ
;
k
++
)
fprintf
(
stderr
,
"%ld "
,
jb
->
hist_maxbuf
[
k
]);
fprintf
(
stderr
,
"
\n
minbuf ="
);
_debug
(
"%ld "
,
jb
->
hist_maxbuf
[
k
]);
_debug
(
"
\n
minbuf ="
);
for
(
k
=
0
;
k
<
JB_HISTORY_MAXBUF_SZ
;
k
++
)
fprintf
(
stderr
,
"%ld "
,
jb
->
hist_minbuf
[
k
]);
fprintf
(
stderr
,
"
\n
"
);
_debug
(
"%ld "
,
jb
->
hist_minbuf
[
k
]);
_debug
(
"
\n
"
);
}
}
...
...
@@ -397,7 +400,7 @@ static jb_frame *_queue_get(jitterbuf *jb, long ts, int all)
if
(
!
frame
)
return
NULL
;
printf
(
"queue_get: ASK %ld FIRST %ld
\n
"
,
ts
,
frame
->
ts
);
_debug
(
"queue_get: ASK %ld FIRST %ld
\n
"
,
ts
,
frame
->
ts
);
if
(
all
||
ts
>=
frame
->
ts
)
{
/* remove this frame */
...
...
@@ -438,17 +441,17 @@ static jb_frame *queue_getall(jitterbuf *jb)
void
jb_dbginfo
(
jitterbuf
*
jb
)
{
printf
(
"
\n
jb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld
\n
"
,
_debug
(
"
\n
jb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld
\n
"
,
jb
->
info
.
frames_in
,
jb
->
info
.
frames_out
,
jb
->
info
.
frames_late
,
jb
->
info
.
frames_lost
,
jb
->
info
.
frames_dropped
,
jb
->
info
.
frames_cur
);
printf
(
"jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld
\n
"
,
_debug
(
"jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld
\n
"
,
jb
->
info
.
jitter
,
jb
->
info
.
current
,
jb
->
info
.
target
,
jb
->
info
.
min
,
jb
->
info
.
silence_begin_ts
,
jb
->
info
.
current
-
jb
->
info
.
min
,
jb
->
info
.
frames_cur
?
(
jb
->
info
.
current
-
jb
->
info
.
min
)
/
jb
->
info
.
frames_cur
:
-
8
);
if
(
jb
->
info
.
frames_in
>
0
)
printf
(
"jb info: Loss PCT = %ld%%, Late PCT = %ld%%
\n
"
,
_debug
(
"jb info: Loss PCT = %ld%%, Late PCT = %ld%%
\n
"
,
jb
->
info
.
frames_lost
*
100
/
(
jb
->
info
.
frames_in
+
jb
->
info
.
frames_lost
),
jb
->
info
.
frames_late
*
100
/
jb
->
info
.
frames_in
);
printf
(
"jb info: queue %ld -> %ld. last_ts %ld (queue len: %ld) last_ms %ld
\n\n
"
,
_debug
(
"jb info: queue %ld -> %ld. last_ts %ld (queue len: %ld) last_ms %ld
\n\n
"
,
queue_next
(
jb
),
queue_last
(
jb
),
jb
->
info
.
next_voice_ts
,
...
...
@@ -497,21 +500,21 @@ static void jb_dbgqueue(jitterbuf *jb)
}
#endif
enum
jb_return_code
jb_put
(
jitterbuf
*
jb
,
void
*
data
,
const
enum
jb_frame_type
type
,
long
ms
,
long
ts
,
long
now
)
jb_return_code
jb_put
(
jitterbuf
*
jb
,
void
*
data
,
const
enum
jb_frame_type
type
,
long
ms
,
long
ts
,
long
now
)
{
long
numts
;
printf
(
"jb_put(%p,%p,%ld,%ld,%ld)
\n
"
,
jb
,
data
,
ms
,
ts
,
now
);
_debug
(
"jb_put(%p,%p,%ld,%ld,%ld)
\n
"
,
jb
,
data
,
ms
,
ts
,
now
);
numts
=
0
;
if
(
jb
->
frames
)
numts
=
jb
->
frames
->
prev
->
ts
-
jb
->
frames
->
ts
;
printf
(
"numts %ld
\n
"
,
numts
);
_debug
(
"numts %ld
\n
"
,
numts
);
if
(
numts
>=
jb
->
info
.
conf
.
max_jitterbuf
)
{
if
(
!
jb
->
dropem
)
{
printf
(
"Attempting to exceed Jitterbuf max %ld timeslots
\n
"
,
_debug
(
"Attempting to exceed Jitterbuf max %ld timeslots
\n
"
,
jb
->
info
.
conf
.
max_jitterbuf
);
jb
->
dropem
=
1
;
}
...
...
@@ -546,7 +549,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
long
diff
;
static
int
dbg_cnt
=
0
;
printf
(
"_jb_get
\n
"
);
_debug
(
"_jb_get
\n
"
);
/*if ((now - jb_next(jb)) > 2 * jb->info.last_voice_ms) jb_warn("SCHED: %ld", (now - jb_next(jb))); */
/* get jitter info */
...
...
@@ -562,13 +565,13 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
/* if a hard clamp was requested, use it */
if
((
jb
->
info
.
conf
.
max_jitterbuf
)
&&
((
jb
->
info
.
target
-
jb
->
info
.
min
)
>
jb
->
info
.
conf
.
max_jitterbuf
))
{
printf
(
"clamping target from %ld to %ld
\n
"
,
(
jb
->
info
.
target
-
jb
->
info
.
min
),
jb
->
info
.
conf
.
max_jitterbuf
);
_debug
(
"clamping target from %ld to %ld
\n
"
,
(
jb
->
info
.
target
-
jb
->
info
.
min
),
jb
->
info
.
conf
.
max_jitterbuf
);
jb
->
info
.
target
=
jb
->
info
.
min
+
jb
->
info
.
conf
.
max_jitterbuf
;
}
diff
=
jb
->
info
.
target
-
jb
->
info
.
current
;
printf
(
"diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld
\n
"
,
diff
,
_debug
(
"diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld
\n
"
,
diff
,
jb
->
info
.
last_voice_ms
,
jb
->
info
.
last_adjustment
,
now
);
/* let's work on non-silent case first */
...
...
@@ -584,11 +587,11 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
if((diff > queue_last(jb) - queue_next(jb)))
printf("diff > queue_last(jb) - queue_next(jb)\n");
*/
printf
(
"** Non-silent case update timing info **
\n
"
);
printf
(
"diff %ld
\n
"
,
diff
);
printf
(
"jb->info.last_adjustment %ld
\n
"
,
jb
->
info
.
last_adjustment
);
printf
(
"JB_ADJUST_DELAY %ld
\n
"
,
JB_ADJUST_DELAY
);
printf
(
"now %ld
\n
"
,
now
);
_debug
(
"** Non-silent case update timing info **
\n
"
);
_debug
(
"diff %ld
\n
"
,
diff
);
_debug
(
"jb->info.last_adjustment %ld
\n
"
,
jb
->
info
.
last_adjustment
);
_debug
(
"JB_ADJUST_DELAY %ld
\n
"
,
JB_ADJUST_DELAY
);
_debug
(
"now %ld
\n
"
,
now
);
/* we want to grow */
if
((
diff
>
0
)
&&
...
...
@@ -610,16 +613,16 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
jb
->
info
.
silence_begin_ts
=
jb
->
info
.
next_voice_ts
-
jb
->
info
.
current
;
}
printf
(
"Non silent case
\n
"
);
_debug
(
"Non silent case
\n
"
);
return
JB_INTERP
;
}
printf
(
"queue get
\n
"
);
_debug
(
"queue get
\n
"
);
frame
=
queue_get
(
jb
,
jb
->
info
.
next_voice_ts
-
jb
->
info
.
current
);
if
(
!
frame
)
printf
(
"frame not valid
\n
"
);
_debug
(
"frame not valid
\n
"
);
/* not a voice frame; just return it. */
if
(
frame
&&
frame
->
type
!=
JB_TYPE_VOICE
)
{
...
...
@@ -630,7 +633,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
*
frameout
=
*
frame
;
jb
->
info
.
frames_out
++
;
printf
(
"Not a voice packet
\n
"
);
_debug
(
"Not a voice packet
\n
"
);
return
JB_OK
;
}
...
...
@@ -646,7 +649,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
jb
->
info
.
frames_out
++
;
decrement_losspct
(
jb
);
jb
->
info
.
cnt_contig_interp
=
0
;
printf
(
"Either we interpolated past this frame in the last jb_get"
\
_debug
(
"Either we interpolated past this frame in the last jb_get"
\
"or the frame is still in order, but came a little too quick
\n
"
);
return
JB_OK
;
}
else
{
...
...
@@ -656,8 +659,8 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
decrement_losspct
(
jb
);
jb
->
info
.
frames_late
++
;
jb
->
info
.
frames_lost
--
;
printf
(
"Voice frame is late
\n
"
);
printf
(
"late: wanted=%ld, this=%ld, next=%ld
\n
"
,
jb
->
info
.
next_voice_ts
-
jb
->
info
.
current
,
frame
->
ts
,
queue_next
(
jb
));
_debug
(
"Voice frame is late
\n
"
);
_debug
(
"late: wanted=%ld, this=%ld, next=%ld
\n
"
,
jb
->
info
.
next_voice_ts
-
jb
->
info
.
current
,
frame
->
ts
,
queue_next
(
jb
));
return
JB_DROP
;
}
}
...
...
@@ -685,7 +688,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
jb
->
info
.
frames_out
++
;
decrement_losspct
(
jb
);
jb
->
info
.
frames_dropped
++
;
printf
(
"Shrink by frame size we're throwing out"
);
_debug
(
"Shrink by frame size we're throwing out"
);
return
JB_DROP
;
}
else
{
/* shrink by last_voice_ms */
...
...
@@ -693,7 +696,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
jb
->
info
.
frames_lost
++
;
increment_losspct
(
jb
);
jb_dbg
(
"S"
);
printf
(
"No frames, shrink by last_voice_ms"
);
_debug
(
"No frames, shrink by last_voice_ms"
);
return
JB_NOFRAME
;
}
}
...
...
@@ -743,7 +746,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now,
return
JB_OK
;
}
else
{
printf
(
"Silence???
\n
"
);
_debug
(
"Silence???
\n
"
);
/* TODO: after we get the non-silent case down, we'll make the
* silent case -- basically, we'll just grow and shrink faster
* here, plus handle next_voice_ts a bit differently */
...
...
@@ -814,6 +817,8 @@ long jb_next(jitterbuf *jb)
enum
jb_return_code
jb_get
(
jitterbuf
*
jb
,
jb_frame
*
frameout
,
long
now
,
long
interpl
)
{
_debug
(
"
\n
***** JB_GET *****
\n\n
"
);
enum
jb_return_code
ret
=
_jb_get
(
jb
,
frameout
,
now
,
interpl
);
#if 0
static int lastts=0;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment