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

Unified Diff: media/audio/android/opensles_output.cc

Issue 2101303004: Pass delay and timestamp to AudioSourceCallback::OnMoreData. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix Mac CQ errors. Created 4 years, 3 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: media/audio/android/opensles_output.cc
diff --git a/media/audio/android/opensles_output.cc b/media/audio/android/opensles_output.cc
index 5dc916ae03a565994736814dfee7d47ba2fc332d..a49a9302588f140aa46a2e01744c55ae49b9f41d 100644
--- a/media/audio/android/opensles_output.cc
+++ b/media/audio/android/opensles_output.cc
@@ -6,8 +6,10 @@
#include "base/logging.h"
#include "base/macros.h"
+#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "media/audio/android/audio_manager_android.h"
+#include "media/base/audio_timestamp_helper.h"
#define LOG_ON_FAILURE_AND_RETURN(op, ...) \
do { \
@@ -340,16 +342,25 @@ void OpenSLESOutputStream::FillBufferQueueNoLock() {
// Calculate the position relative to the number of frames written.
uint32_t position_in_ms = 0;
SLresult err = (*player_)->GetPosition(player_, &position_in_ms);
- const int delay =
+ // Given the position of the playback head, compute the approximate number of
+ // frames that have been queued to the buffer but not yet played out.
+ // Note that the value returned by GetFramesToTarget() is negative because
+ // more frames have been added to |delay_calculator_| than have been played
+ // out and thus the target timestamp is earlier than the current timestamp of
+ // |delay_calculator_|.
+ const int delay_frames =
err == SL_RESULT_SUCCESS
? -delay_calculator_.GetFramesToTarget(
- base::TimeDelta::FromMilliseconds(position_in_ms)) *
- bytes_per_frame_
+ base::TimeDelta::FromMilliseconds(position_in_ms))
: 0;
- DCHECK_GE(delay, 0);
+ DCHECK_GE(delay_frames, 0);
+
+ const base::TimeDelta delay =
+ AudioTimestampHelper::FramesToTime(delay_frames, format_.samplesPerSec);
// Read data from the registered client source.
- const int frames_filled = callback_->OnMoreData(audio_bus_.get(), delay, 0);
+ const int frames_filled =
+ callback_->OnMoreData(delay, base::TimeTicks::Now(), 0, audio_bus_.get());
if (frames_filled <= 0) {
// Audio source is shutting down, or halted on error.
return;

Powered by Google App Engine
This is Rietveld 408576698