resolve b9050210. Avoid pushing sync packet before any packet received. Do not turn on AV-sync if initial delay is zero.

Also solve DTMF playout with Opus. 

issue=b9050210
Test=Manual by QA Team.

R=tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/1583004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4176 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
turaj@webrtc.org 2013-06-04 19:18:39 +00:00
parent 3d34f66292
commit 9238de9d49

View File

@ -2119,8 +2119,9 @@ int32_t AudioCodingModuleImpl::IncomingPacket(
} }
// Set the following regardless of tracking NetEq buffer or being in // Set the following regardless of tracking NetEq buffer or being in
// AV-sync mode. // AV-sync mode. Only if the received packet is not CNG.
first_payload_received_ = true; if (!rtp_info.type.Audio.isCNG)
first_payload_received_ = true;
} }
return 0; return 0;
} }
@ -2327,10 +2328,11 @@ int32_t AudioCodingModuleImpl::PlayoutData10Ms(
{ {
CriticalSectionScoped lock(acm_crit_sect_); CriticalSectionScoped lock(acm_crit_sect_);
// If we are in AV-sync and number of packets is below a threshold or // If we are in AV-sync and have already received an audio packet, but the
// next packet is late then inject a sync packet. // latest packet is too late, then insert sync packet.
if (av_sync_ && NowTimestamp(current_receive_codec_idx_) > 5 * if (av_sync_ && first_payload_received_ &&
last_timestamp_diff_ + last_receive_timestamp_) { NowTimestamp(current_receive_codec_idx_) > 5 * last_timestamp_diff_ +
last_receive_timestamp_) {
if (!last_packet_was_sync_) { if (!last_packet_was_sync_) {
// If the last packet inserted has been a regular packet Skip two // If the last packet inserted has been a regular packet Skip two
// packets to give room for PLC. // packets to give room for PLC.
@ -2934,10 +2936,12 @@ int AudioCodingModuleImpl::SetInitialPlayoutDelay(int delay_ms) {
return -1; return -1;
} }
initial_delay_ms_ = delay_ms; initial_delay_ms_ = delay_ms;
if (delay_ms > 0) {
track_neteq_buffer_ = true; // If initial delay is zero, NetEq buffer should not be tracked, also we
} // don't want to be in AV-sync mode.
av_sync_ = true; track_neteq_buffer_ = delay_ms > 0;
av_sync_ = delay_ms > 0;
neteq_.EnableAVSync(av_sync_); neteq_.EnableAVSync(av_sync_);
return neteq_.SetMinimumDelay(delay_ms); return neteq_.SetMinimumDelay(delay_ms);
} }