summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Threads.cpp
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-04-09 19:07:01 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-04-09 19:07:01 +0000
commit4b99b0dc3d4bc5700f276f59fc3a5da4dc90a108 (patch)
treefee1bf6b404352b1135fbb17e9f6987d1580aab5 /services/audioflinger/Threads.cpp
parente313cff42defff96ac2d94da50213e6df1b97c06 (diff)
parent47affe5c842bdab14d5889d7a12da74b9ac97eb5 (diff)
downloadframeworks_av-4b99b0dc3d4bc5700f276f59fc3a5da4dc90a108.tar.gz
frameworks_av-4b99b0dc3d4bc5700f276f59fc3a5da4dc90a108.tar.bz2
frameworks_av-4b99b0dc3d4bc5700f276f59fc3a5da4dc90a108.zip
Merge "Copy haptic data directly from effect in buffer to out buffer." into qt-dev
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r--services/audioflinger/Threads.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 0b203c42f6..0bb2213798 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -3610,8 +3610,30 @@ bool AudioFlinger::PlaybackThread::threadLoop()
// only process effects if we're going to write
if (mSleepTimeUs == 0 && mType != OFFLOAD) {
+ audio_session_t activeHapticId = AUDIO_SESSION_NONE;
+ if (mHapticChannelCount > 0 && effectChains.size() > 0) {
+ for (auto track : mActiveTracks) {
+ if (track->getHapticPlaybackEnabled()) {
+ activeHapticId = track->sessionId();
+ break;
+ }
+ }
+ }
for (size_t i = 0; i < effectChains.size(); i ++) {
effectChains[i]->process_l();
+ // TODO: Write haptic data directly to sink buffer when mixing.
+ if (activeHapticId != AUDIO_SESSION_NONE
+ && activeHapticId == effectChains[i]->sessionId()) {
+ // Haptic data is active in this case, copy it directly from
+ // in buffer to out buffer.
+ const size_t audioBufferSize = mNormalFrameCount
+ * audio_bytes_per_frame(mChannelCount, EFFECT_BUFFER_FORMAT);
+ memcpy_by_audio_format(
+ (uint8_t*)effectChains[i]->outBuffer() + audioBufferSize,
+ EFFECT_BUFFER_FORMAT,
+ (const uint8_t*)effectChains[i]->inBuffer() + audioBufferSize,
+ EFFECT_BUFFER_FORMAT, mNormalFrameCount * mHapticChannelCount);
+ }
}
}
}