summaryrefslogtreecommitdiffstats
path: root/core/jni/android_media_AudioTrack.cpp
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2015-05-14 00:21:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-14 00:21:23 +0000
commit1864460bf3c495e7821326f9753324247d4c778b (patch)
tree4aee84084646275bb8a63e7d4782a7ab513a6934 /core/jni/android_media_AudioTrack.cpp
parent5703ef5bf85f4810b1c0958bd1c45603af055db7 (diff)
parent973b8851eecbdcbab4992be01aaab568fd371a0a (diff)
downloadframeworks_base-1864460bf3c495e7821326f9753324247d4c778b.zip
frameworks_base-1864460bf3c495e7821326f9753324247d4c778b.tar.gz
frameworks_base-1864460bf3c495e7821326f9753324247d4c778b.tar.bz2
Merge "Allow partial playback parameter settings in AudioTrack" into mnc-dev
Diffstat (limited to 'core/jni/android_media_AudioTrack.cpp')
-rw-r--r--core/jni/android_media_AudioTrack.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index aeb058b..daafd5e 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -702,18 +702,40 @@ static void android_media_AudioTrack_set_playback_params(JNIEnv *env, jobject t
return;
}
- PlaybackParams pbs;
- pbs.fillFromJobject(env, gPlaybackParamsFields, params);
+ PlaybackParams pbp;
+ pbp.fillFromJobject(env, gPlaybackParamsFields, params);
ALOGV("setPlaybackParams: %d:%f %d:%f %d:%u %d:%u",
- pbs.speedSet, pbs.audioRate.mSpeed,
- pbs.pitchSet, pbs.audioRate.mPitch,
- pbs.audioFallbackModeSet, pbs.audioRate.mFallbackMode,
- pbs.audioStretchModeSet, pbs.audioRate.mStretchMode);
-
- if (lpTrack->setPlaybackRate(pbs.audioRate) != OK) {
- jniThrowException(env, "java/lang/IllegalArgumentException",
- "arguments out of range");
+ pbp.speedSet, pbp.audioRate.mSpeed,
+ pbp.pitchSet, pbp.audioRate.mPitch,
+ pbp.audioFallbackModeSet, pbp.audioRate.mFallbackMode,
+ pbp.audioStretchModeSet, pbp.audioRate.mStretchMode);
+
+ // to simulate partially set params, we do a read-modify-write.
+ // TODO: pass in the valid set mask into AudioTrack.
+ AudioPlaybackRate rate = lpTrack->getPlaybackRate();
+ bool updatedRate = false;
+ if (pbp.speedSet) {
+ rate.mSpeed = pbp.audioRate.mSpeed;
+ updatedRate = true;
+ }
+ if (pbp.pitchSet) {
+ rate.mPitch = pbp.audioRate.mPitch;
+ updatedRate = true;
+ }
+ if (pbp.audioFallbackModeSet) {
+ rate.mFallbackMode = pbp.audioRate.mFallbackMode;
+ updatedRate = true;
+ }
+ if (pbp.audioStretchModeSet) {
+ rate.mStretchMode = pbp.audioRate.mStretchMode;
+ updatedRate = true;
+ }
+ if (updatedRate) {
+ if (lpTrack->setPlaybackRate(rate) != OK) {
+ jniThrowException(env, "java/lang/IllegalArgumentException",
+ "arguments out of range");
+ }
}
}