NuPlayer: Reserve buffer for 8x max speed
Affects Photos with Bluetooth and 240x recording.
Bug: 26986060
Change-Id: I228223221f9811e05c274d64cd42ac104db04c36
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 1a3013a..2afbdb4 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -94,6 +94,8 @@
// Max number of entries in the filter.
const int kMaxFilterSize = 64; // I pulled that out of thin air.
+const float kMaxRequiredSpeed = 8.0f; // for PCM tracks allow up to 8x speedup.
+
// FIXME: Move all the metadata related function in the Metadata.cpp
@@ -1749,6 +1751,14 @@
mAttributes,
doNotReconnect);
} else {
+ // TODO: Due to buffer memory concerns, we use a max target playback speed
+ // based on mPlaybackRate at the time of open (instead of kMaxRequiredSpeed),
+ // also clamping the target speed to 1.0 <= targetSpeed <= kMaxRequiredSpeed.
+ const float targetSpeed =
+ std::min(std::max(mPlaybackRate.mSpeed, 1.0f), kMaxRequiredSpeed);
+ ALOGW_IF(targetSpeed != mPlaybackRate.mSpeed,
+ "track target speed:%f clamped from playback speed:%f",
+ targetSpeed, mPlaybackRate.mSpeed);
t = new AudioTrack(
mStreamType,
sampleRate,
@@ -1765,7 +1775,8 @@
mUid,
mPid,
mAttributes,
- doNotReconnect);
+ doNotReconnect,
+ targetSpeed);
}
if ((t == 0) || (t->initCheck() != NO_ERROR)) {