Commit 770ba687 authored by Sergey Ulanov's avatar Sergey Ulanov Committed by Commit Bot

[Fuchsia] Fix Play() and SendPacket() order in AudioOutputStreamFuchsia

Two fixes for AudioOutputStreamFuchsia:
 - Don't call Play() until after the first SendPacket() call as is
   required by the AudioRenderer interface.
 - Add padding to min_lead_time_ for the first packet, to reduce the
   chance that samples at the beginning of the stream are dropped.

Bug: 974029
Change-Id: If2dc43a3df7d671a42f7983dea130fa3b10ad1ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1659230
Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarWez <wez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#669914}
parent 85dab00e
...@@ -197,7 +197,8 @@ void AudioOutputStreamFuchsia::PumpSamples() { ...@@ -197,7 +197,8 @@ void AudioOutputStreamFuchsia::PumpSamples() {
base::TimeDelta delay; base::TimeDelta delay;
if (reference_time_.is_null()) { if (reference_time_.is_null()) {
delay = min_lead_time_.value(); delay = min_lead_time_.value() + parameters_.GetBufferDuration() / 2;
stream_position_samples_ = 0;
} else { } else {
auto stream_time = GetCurrentStreamTime(); auto stream_time = GetCurrentStreamTime();
...@@ -211,14 +212,6 @@ void AudioOutputStreamFuchsia::PumpSamples() { ...@@ -211,14 +212,6 @@ void AudioOutputStreamFuchsia::PumpSamples() {
delay = stream_time - now; delay = stream_time - now;
} }
// Start playback if the stream was previously stopped.
if (reference_time_.is_null()) {
stream_position_samples_ = 0;
reference_time_ = now + min_lead_time_.value();
audio_renderer_->PlayNoReply(reference_time_.ToZxTime(),
stream_position_samples_);
}
// Request more samples from |callback_|. // Request more samples from |callback_|.
int frames_filled = callback_->OnMoreData(delay, now, 0, audio_bus_.get()); int frames_filled = callback_->OnMoreData(delay, now, 0, audio_bus_.get());
DCHECK_EQ(frames_filled, audio_bus_->frames()); DCHECK_EQ(frames_filled, audio_bus_->frames());
...@@ -242,6 +235,13 @@ void AudioOutputStreamFuchsia::PumpSamples() { ...@@ -242,6 +235,13 @@ void AudioOutputStreamFuchsia::PumpSamples() {
packet.flags = 0; packet.flags = 0;
audio_renderer_->SendPacketNoReply(std::move(packet)); audio_renderer_->SendPacketNoReply(std::move(packet));
// Start playback if the stream was previously stopped.
if (reference_time_.is_null()) {
reference_time_ = now + delay;
audio_renderer_->PlayNoReply(reference_time_.ToZxTime(),
stream_position_samples_);
}
stream_position_samples_ += frames_filled; stream_position_samples_ += frames_filled;
payload_buffer_pos_ = payload_buffer_pos_ =
(payload_buffer_pos_ + packet_size) % payload_buffer_.size(); (payload_buffer_pos_ + packet_size) % payload_buffer_.size();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment