Make sure audio clock doesn't jump back due to out of order packets

This commit is contained in:
Jeremy Lakeman 2013-05-27 10:40:22 +09:30
parent 6a89f7a321
commit 5fc9264c49

22
vomp.c
View File

@ -727,20 +727,32 @@ static int vomp_process_audio(struct vomp_call_state *call, overlay_mdp_frame *m
ofs+=2;
// rebuild absolute time value from short relative time.
call->remote_audio_clock=to_absolute_value(time, call->remote_audio_clock);
call->remote.sequence=to_absolute_value(sequence, call->remote.sequence);
int decoded_time = to_absolute_value(time, call->remote_audio_clock);
int decoded_sequence = to_absolute_value(sequence, call->remote.sequence);
time=call->remote_audio_clock * 20;
if (call->remote_audio_clock < decoded_time &&
call->remote.sequence < decoded_sequence){
call->remote_audio_clock = decoded_time;
call->remote.sequence = decoded_sequence;
}else if (call->remote_audio_clock < decoded_time ||
call->remote.sequence < decoded_sequence){
WARNF("Mismatch while decoding sequence and time offset (%d, %d) + (%d, %d) = (%d, %d)",
time, sequence,
call->remote_audio_clock, call->remote.sequence,
decoded_time, decoded_sequence);
}
decoded_time=decoded_time * 20;
int audio_len = mdp->in.payload_length - ofs;
int delay=0;
if (store_jitter_sample(&call->jitter, time, now, &delay))
if (store_jitter_sample(&call->jitter, decoded_time, now, &delay))
return 0;
/* Pass audio frame to all registered listeners */
if (monitor_socket_count)
monitor_send_audio(call, codec, time, call->remote.sequence,
monitor_send_audio(call, codec, decoded_time, decoded_sequence,
&mdp->in.payload[ofs],
audio_len, delay);
return 0;