diff options
| author | Andy Hung <hunga@google.com> | 2015-05-14 00:21:23 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-14 00:21:23 +0000 |
| commit | 1864460bf3c495e7821326f9753324247d4c778b (patch) | |
| tree | 4aee84084646275bb8a63e7d4782a7ab513a6934 /core/jni/android_media_AudioTrack.cpp | |
| parent | 5703ef5bf85f4810b1c0958bd1c45603af055db7 (diff) | |
| parent | 973b8851eecbdcbab4992be01aaab568fd371a0a (diff) | |
| download | frameworks_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.cpp | 42 |
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"); + } } } |
