Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2268)

Unified Diff: components/copresence/handlers/audio/audio_directive_handler.cc

Issue 453793002: Add audible support to the copresence API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 c17a53a0d3750f961efbdb82301143ce860f1564..d7591c95f41d25ccbfe68bbb6fa84013855e11e2 100644
--- a/components/copresence/handlers/audio/audio_directive_handler.cc
+++ b/components/copresence/handlers/audio/audio_directive_handler.cc
@@ -4,6 +4,8 @@
#include "components/copresence/handlers/audio/audio_directive_handler.h"
+#include <algorithm>
+
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
@@ -20,9 +22,16 @@ namespace copresence {
AudioDirectiveHandler::AudioDirectiveHandler(
const AudioRecorder::DecodeSamplesCallback& decode_cb,
const AudioDirectiveList::EncodeTokenCallback& encode_cb)
- : directive_list_(encode_cb,
- base::Bind(&AudioDirectiveHandler::ExecuteNextTransmit,
- base::Unretained(this))),
+ : directive_list_inaudible_(
+ encode_cb,
+ base::Bind(&AudioDirectiveHandler::ExecuteNextTransmit,
+ base::Unretained(this)),
+ false),
+ directive_list_audible_(
+ encode_cb,
+ base::Bind(&AudioDirectiveHandler::ExecuteNextTransmit,
+ base::Unretained(this)),
+ true),
player_(NULL),
recorder_(NULL),
decode_cb_(decode_cb) {
@@ -51,14 +60,33 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
<< instruction.token_id()
<< " with TTL=" << ttl.InMilliseconds();
// TODO(rkc): Fill in the op_id once we get it from the directive.
- directive_list_.AddTransmitDirective(
- instruction.token_id(), std::string(), ttl);
+ switch (instruction.medium()) {
+ case AUDIO_ULTRASOUND_PASSBAND:
+ directive_list_inaudible_.AddTransmitDirective(
+ instruction.token_id(), std::string(), ttl);
+ break;
+ case AUDIO_AUDIBLE_DTMF:
+ directive_list_audible_.AddTransmitDirective(
+ instruction.token_id(), std::string(), ttl);
+ break;
+ default:
+ NOTREACHED();
+ }
break;
case RECEIVE:
DVLOG(2) << "Audio Receive Directive received. TTL="
<< ttl.InMilliseconds();
// TODO(rkc): Fill in the op_id once we get it from the directive.
- directive_list_.AddReceiveDirective(std::string(), ttl);
+ switch (instruction.medium()) {
+ case AUDIO_ULTRASOUND_PASSBAND:
+ directive_list_inaudible_.AddReceiveDirective(std::string(), ttl);
+ break;
+ case AUDIO_AUDIBLE_DTMF:
+ directive_list_audible_.AddReceiveDirective(std::string(), ttl);
+ break;
+ default:
+ NOTREACHED();
+ }
break;
case UNKNOWN_TOKEN_INSTRUCTION_TYPE:
default:
@@ -99,15 +127,34 @@ void AudioDirectiveHandler::StopRecording() {
}
void AudioDirectiveHandler::ExecuteNextTransmit() {
- scoped_ptr<AudioDirective> transmit(directive_list_.GetNextTransmit());
- if (transmit)
- PlayAudio(transmit->samples, transmit->end_time - base::Time::Now());
+ scoped_ptr<AudioDirective> audible_transmit(
+ directive_list_audible_.GetNextTransmit());
+ scoped_ptr<AudioDirective> inaudible_transmit(
+ directive_list_inaudible_.GetNextTransmit());
+
+ if (inaudible_transmit)
+ PlayAudio(inaudible_transmit->samples,
+ inaudible_transmit->end_time - base::Time::Now());
xiyuan 2014/08/08 20:40:54 nit: wrap with {} since it is more than 1 line.
rkc 2014/08/08 21:24:37 Done.
+ if (audible_transmit)
+ PlayAudio(audible_transmit->samples,
+ audible_transmit->end_time - base::Time::Now());
xiyuan 2014/08/08 20:40:54 ditto
rkc 2014/08/08 21:24:37 Done.
}
void AudioDirectiveHandler::ExecuteNextReceive() {
- scoped_ptr<AudioDirective> receive(directive_list_.GetNextReceive());
- if (receive)
- RecordAudio(receive->end_time - base::Time::Now());
+ scoped_ptr<AudioDirective> audible_receive(
+ directive_list_audible_.GetNextReceive());
+ scoped_ptr<AudioDirective> inaudible_receive(
+ directive_list_inaudible_.GetNextReceive());
+
+ base::TimeDelta record_duration;
+ if (inaudible_receive)
+ record_duration = inaudible_receive->end_time - base::Time::Now();
+ if (audible_receive)
+ record_duration = std::max(record_duration,
+ audible_receive->end_time - base::Time::Now());
xiyuan 2014/08/08 20:40:54 ditto
rkc 2014/08/08 21:24:37 Done.
+
+ if (record_duration > base::TimeDelta::FromSeconds(0))
+ RecordAudio(record_duration);
}
} // namespace copresence

Powered by Google App Engine
This is Rietveld 408576698