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

Unified Diff: media/audio/win/audio_output_win_unittest.cc

Issue 2517503003: Reland: Make more media APIs aware of |delay| and |delay_timestamp| (Closed)
Patch Set: Comments from chcunningham@ and Dale Created 4 years 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
« no previous file with comments | « media/audio/null_audio_sink.cc ('k') | media/base/audio_bus_perftest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/win/audio_output_win_unittest.cc
diff --git a/media/audio/win/audio_output_win_unittest.cc b/media/audio/win/audio_output_win_unittest.cc
index 8a131ac5afa972b947fad4e442bad8a39f53dee9..23c85e5918c6ae5737de1738078d49d3cf63229a 100644
--- a/media/audio/win/audio_output_win_unittest.cc
+++ b/media/audio/win/audio_output_win_unittest.cc
@@ -532,26 +532,34 @@ class SyncSocketSource : public AudioOutputStream::AudioSourceCallback {
SyncSocketSource(base::SyncSocket* socket, const AudioParameters& params)
: socket_(socket), params_(params) {
// Setup AudioBus wrapping data we'll receive over the sync socket.
- data_size_ = AudioBus::CalculateMemorySize(params);
+ packet_size_ = AudioBus::CalculateMemorySize(params);
data_.reset(static_cast<float*>(
- base::AlignedAlloc(data_size_, AudioBus::kChannelAlignment)));
- audio_bus_ = AudioBus::WrapMemory(params, data_.get());
+ base::AlignedAlloc(packet_size_ + sizeof(AudioOutputBufferParameters),
+ AudioBus::kChannelAlignment)));
+ audio_bus_ = AudioBus::WrapMemory(params, output_buffer()->audio);
}
~SyncSocketSource() override {}
// AudioSourceCallback::OnMoreData implementation:
int OnMoreData(base::TimeDelta delay,
- base::TimeTicks /* delay_timestamp */,
+ base::TimeTicks delay_timestamp,
int /* prior_frames_skipped */,
AudioBus* dest) override {
- uint32_t total_bytes_delay =
- delay.InSecondsF() * params_.GetBytesPerSecond();
- socket_->Send(&total_bytes_delay, sizeof(total_bytes_delay));
- uint32_t size = socket_->Receive(data_.get(), data_size_);
+ uint32_t control_signal = 0;
+ socket_->Send(&control_signal, sizeof(control_signal));
+ output_buffer()->params.delay = delay.InMicroseconds();
+ output_buffer()->params.delay_timestamp =
+ (delay_timestamp - base::TimeTicks()).InMicroseconds();
+ uint32_t size = socket_->Receive(data_.get(), packet_size_);
+
DCHECK_EQ(static_cast<size_t>(size) % sizeof(*audio_bus_->channel(0)), 0U);
audio_bus_->CopyTo(dest);
return audio_bus_->frames();
}
+ int packet_size() const { return packet_size_; }
+ AudioOutputBuffer* output_buffer() const {
+ return reinterpret_cast<AudioOutputBuffer*>(data_.get());
+ }
// AudioSourceCallback::OnError implementation:
void OnError(AudioOutputStream* stream) override {}
@@ -559,7 +567,7 @@ class SyncSocketSource : public AudioOutputStream::AudioSourceCallback {
private:
base::SyncSocket* socket_;
const AudioParameters params_;
- int data_size_;
+ int packet_size_;
std::unique_ptr<float, base::AlignedFreeDeleter> data_;
std::unique_ptr<AudioBus> audio_bus_;
};
@@ -571,7 +579,7 @@ struct SyncThreadContext {
int frames;
double sine_freq;
uint32_t packet_size_bytes;
- int bytes_per_second;
+ AudioOutputBuffer* buffer;
};
// This thread provides the data that the SyncSocketSource above needs
@@ -592,17 +600,17 @@ DWORD __stdcall SyncSocketThread(void* context) {
SineWaveAudioSource sine(1, ctx.sine_freq, ctx.sample_rate);
const int kTwoSecFrames = ctx.sample_rate * 2;
- uint32_t total_bytes_delay = 0;
- int times = 0;
+ uint32_t control_signal = 0;
for (int ix = 0; ix < kTwoSecFrames; ix += ctx.frames) {
- if (ctx.socket->Receive(&total_bytes_delay, sizeof(total_bytes_delay)) == 0)
+ if (ctx.socket->Receive(&control_signal, sizeof(control_signal)) == 0)
break;
- if ((times > 0) && (total_bytes_delay < 1000)) __debugbreak();
- base::TimeDelta delay = base::TimeDelta::FromSecondsD(
- static_cast<double>(total_bytes_delay) / ctx.bytes_per_second);
- sine.OnMoreData(delay, base::TimeTicks::Now(), 0, audio_bus.get());
+ base::TimeDelta delay =
+ base::TimeDelta::FromMicroseconds(ctx.buffer->params.delay);
+ base::TimeTicks delay_timestamp =
+ base::TimeTicks() +
+ base::TimeDelta::FromMicroseconds(ctx.buffer->params.delay_timestamp);
+ sine.OnMoreData(delay, delay_timestamp, 0, audio_bus.get());
ctx.socket->Send(data.get(), ctx.packet_size_bytes);
- ++times;
}
return 0;
@@ -638,11 +646,11 @@ TEST_F(WinAudioTest, SyncSocketBasic) {
SyncThreadContext thread_context;
thread_context.sample_rate = params.sample_rate();
thread_context.sine_freq = 200.0;
- thread_context.packet_size_bytes = AudioBus::CalculateMemorySize(params);
+ thread_context.packet_size_bytes = source.packet_size();
thread_context.frames = params.frames_per_buffer();
thread_context.channels = params.channels();
thread_context.socket = &sockets[1];
- thread_context.bytes_per_second = params.GetBytesPerSecond();
+ thread_context.buffer = source.output_buffer();
HANDLE thread = ::CreateThread(NULL, 0, SyncSocketThread,
&thread_context, 0, NULL);
« no previous file with comments | « media/audio/null_audio_sink.cc ('k') | media/base/audio_bus_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698