Index: components/copresence/handlers/audio/audio_directive_handler.cc |
diff --git a/components/copresence/handlers/audio/audio_directive_handler.cc b/components/copresence/handlers/audio/audio_directive_handler.cc |
index fcf1d8247c66c93a3cbe08e8d489b61f02eeba92..a31f703956284510bf51ce0d352aaf18cdca6795 100644 |
--- a/components/copresence/handlers/audio/audio_directive_handler.cc |
+++ b/components/copresence/handlers/audio/audio_directive_handler.cc |
@@ -81,11 +81,11 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction, |
switch (instruction.medium()) { |
case AUDIO_ULTRASOUND_PASSBAND: |
transmits_list_inaudible_.AddDirective(op_id, ttl); |
- HandleToken(instruction.token_id(), false); |
+ PlayToken(instruction.token_id(), false); |
break; |
case AUDIO_AUDIBLE_DTMF: |
transmits_list_audible_.AddDirective(op_id, ttl); |
- HandleToken(instruction.token_id(), true); |
+ PlayToken(instruction.token_id(), true); |
break; |
default: |
NOTREACHED(); |
@@ -95,13 +95,12 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction, |
DVLOG(2) << "Audio Receive Directive received. TTL=" |
<< ttl.InMilliseconds(); |
receives_list_.AddDirective(op_id, ttl); |
+ ProcessNextReceive(); |
break; |
case UNKNOWN_TOKEN_INSTRUCTION_TYPE: |
default: |
LOG(WARNING) << "Unknown Audio Transmit Directive received."; |
} |
- // ExecuteNextTransmit will be called by directive_list_ when Add is done. |
- ProcessNextReceive(); |
} |
void AudioDirectiveHandler::RemoveInstructions(const std::string& op_id) { |
@@ -175,32 +174,30 @@ void AudioDirectiveHandler::ProcessNextReceive() { |
} |
} |
-void AudioDirectiveHandler::HandleToken(const std::string token, bool audible) { |
+void AudioDirectiveHandler::PlayToken(const std::string token, bool audible) { |
std::string valid_token = FromUrlSafe(token); |
+ // If the token has been encoded already, use the cached samples. |
if (audible && samples_cache_audible_.HasKey(valid_token)) { |
current_token_audible_ = token; |
ProcessNextTransmit(); |
- return; |
- } |
- |
- if (!audible && samples_cache_inaudible_.HasKey(valid_token)) { |
+ } else if (!audible && samples_cache_inaudible_.HasKey(valid_token)) { |
current_token_inaudible_ = token; |
ProcessNextTransmit(); |
- return; |
+ } else { |
+ // Otherwise, encode the token and then play it. |
+ encode_cb_.Run(valid_token, |
+ audible, |
+ base::Bind(&AudioDirectiveHandler::PlayEncodedToken, |
+ base::Unretained(this))); |
} |
- |
- encode_cb_.Run(valid_token, |
- audible, |
- base::Bind(&AudioDirectiveHandler::OnTokenEncoded, |
- base::Unretained(this))); |
} |
-void AudioDirectiveHandler::OnTokenEncoded( |
+void AudioDirectiveHandler::PlayEncodedToken( |
const std::string& token, |
bool audible, |
const scoped_refptr<media::AudioBusRefCounted>& samples) { |
- DVLOG(3) << "Token: " << token << "[audible:" << audible << "] encoded."; |
+ DVLOG(3) << "Token " << token << "[audible:" << audible << "] encoded."; |
if (audible) { |
samples_cache_audible_.Add(token, samples); |
current_token_audible_ = token; |