diff options
| -rw-r--r-- | include/media/AudioRecord.h | 4 | ||||
| -rw-r--r-- | include/media/AudioTrack.h | 1 | ||||
| -rw-r--r-- | include/media/IAudioRecord.h | 3 | ||||
| -rw-r--r-- | include/media/IAudioTrack.h | 3 | ||||
| -rw-r--r-- | media/libmedia/AudioRecord.cpp | 37 | ||||
| -rw-r--r-- | media/libmedia/AudioTrack.cpp | 36 | ||||
| -rw-r--r-- | media/libmedia/IAudioRecord.cpp | 5 | ||||
| -rw-r--r-- | media/libmedia/IAudioTrack.cpp | 5 | ||||
| -rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 78 | ||||
| -rw-r--r-- | services/audioflinger/AudioFlinger.h | 13 | ||||
| -rw-r--r-- | services/audioflinger/AudioPolicyService.cpp | 4 |
11 files changed, 106 insertions, 83 deletions
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h index ca57f9edc9ae..437a89c0b09f 100644 --- a/include/media/AudioRecord.h +++ b/include/media/AudioRecord.h @@ -341,7 +341,7 @@ private: private: friend class AudioRecord; virtual bool threadLoop(); - virtual status_t readyToRun() { return NO_ERROR; } + virtual status_t readyToRun(); virtual void onFirstRef() {} AudioRecord& mReceiver; }; @@ -359,7 +359,9 @@ private: sp<IAudioRecord> mAudioRecord; sp<IMemory> mCblkMemory; sp<ClientRecordThread> mClientRecordThread; + status_t mReadyToRun; Mutex mLock; + Condition mCondition; uint32_t mFrameCount; diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h index 11db81ba52fb..03a30888278e 100644 --- a/include/media/AudioTrack.h +++ b/include/media/AudioTrack.h @@ -299,7 +299,6 @@ public: * (loopEnd-loopStart) <= framecount() */ status_t setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount); - status_t getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount) const; /* Sets marker position. When playback reaches the number of frames specified, a callback with * event type EVENT_MARKER is called. Calling setMarkerPosition with marker == 0 cancels marker diff --git a/include/media/IAudioRecord.h b/include/media/IAudioRecord.h index 46735def2f52..7869020e9e06 100644 --- a/include/media/IAudioRecord.h +++ b/include/media/IAudioRecord.h @@ -37,8 +37,9 @@ public: /* After it's created the track is not active. Call start() to * make it active. If set, the callback will start being called. + * tid identifies the client callback thread, or 0 if not needed. */ - virtual status_t start() = 0; + virtual status_t start(pid_t tid) = 0; /* Stop a track. If set, the callback will cease being called and * obtainBuffer will return an error. Buffers that are already released diff --git a/include/media/IAudioTrack.h b/include/media/IAudioTrack.h index b83e552dcd97..b346722aa5d1 100644 --- a/include/media/IAudioTrack.h +++ b/include/media/IAudioTrack.h @@ -40,8 +40,9 @@ public: /* After it's created the track is not active. Call start() to * make it active. If set, the callback will start being called. + * tid identifies the client callback thread, or 0 if not needed. */ - virtual status_t start() = 0; + virtual status_t start(pid_t tid) = 0; /* Stop a track. If set, the callback will cease being called and * obtainBuffer will return an error. Buffers that are already released diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index b74b3e35c8a7..a4068ff2abad 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -304,10 +304,25 @@ status_t AudioRecord::start() if (mActive == 0) { mActive = 1; + pid_t tid; + if (t != 0) { + mReadyToRun = WOULD_BLOCK; + t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO); + tid = t->getTid(); // pid_t is unknown until run() + ALOGV("getTid=%d", tid); + if (tid == -1) { + tid = 0; + } + // thread blocks in readyToRun() + } else { + tid = 0; // not gettid() + } + cblk->lock.lock(); if (!(cblk->flags & CBLK_INVALID_MSK)) { cblk->lock.unlock(); - ret = mAudioRecord->start(); + ALOGV("mAudioRecord->start(tid=%d)", tid); + ret = mAudioRecord->start(tid); cblk->lock.lock(); if (ret == DEAD_OBJECT) { android_atomic_or(CBLK_INVALID_ON, &cblk->flags); @@ -322,7 +337,9 @@ status_t AudioRecord::start() cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; cblk->waitTimeMs = 0; if (t != 0) { - t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO); + // thread unblocks in readyToRun() and returns NO_ERROR + mReadyToRun = NO_ERROR; + mCondition.signal(); } else { mPreviousPriority = getpriority(PRIO_PROCESS, 0); mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0); @@ -330,6 +347,9 @@ status_t AudioRecord::start() } } else { mActive = 0; + // thread unblocks in readyToRun() and returns NO_INIT + mReadyToRun = NO_INIT; + mCondition.signal(); } } @@ -522,7 +542,7 @@ status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) ALOGW( "obtainBuffer timed out (is the CPU pegged?) " "user=%08x, server=%08x", cblk->user, cblk->server); cblk->lock.unlock(); - result = mAudioRecord->start(); + result = mAudioRecord->start(0); // callback thread hasn't changed cblk->lock.lock(); if (result == DEAD_OBJECT) { android_atomic_or(CBLK_INVALID_ON, &cblk->flags); @@ -760,7 +780,7 @@ status_t AudioRecord::restoreRecord_l(audio_track_cblk_t*& cblk) result = openRecord_l(cblk->sampleRate, mFormat, mChannelMask, mFrameCount, mFlags, getInput_l()); if (result == NO_ERROR) { - result = mAudioRecord->start(); + result = mAudioRecord->start(0); // callback thread hasn't changed } if (result != NO_ERROR) { mActive = false; @@ -811,6 +831,15 @@ bool AudioRecord::ClientRecordThread::threadLoop() return mReceiver.processAudioBuffer(this); } +status_t AudioRecord::ClientRecordThread::readyToRun() +{ + AutoMutex(mReceiver.mLock); + while (mReceiver.mReadyToRun == WOULD_BLOCK) { + mReceiver.mCondition.wait(mReceiver.mLock); + } + return mReceiver.mReadyToRun; +} + // ------------------------------------------------------------------------- }; // namespace android diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 087d7b2096f3..e91678aeb4e7 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -362,18 +362,26 @@ void AudioTrack::start() cblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; cblk->waitTimeMs = 0; android_atomic_and(~CBLK_DISABLED_ON, &cblk->flags); + pid_t tid; if (t != 0) { t->run("AudioTrackThread", ANDROID_PRIORITY_AUDIO); + tid = t->getTid(); // pid_t is unknown until run() + ALOGV("getTid=%d", tid); + if (tid == -1) { + tid = 0; + } } else { mPreviousPriority = getpriority(PRIO_PROCESS, 0); mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0); androidSetThreadPriority(0, ANDROID_PRIORITY_AUDIO); + tid = 0; // not gettid() } ALOGV("start %p before lock cblk %p", this, mCblk); if (!(cblk->flags & CBLK_INVALID_MSK)) { cblk->lock.unlock(); - status = mAudioTrack->start(); + ALOGV("mAudioTrack->start(tid=%d)", tid); + status = mAudioTrack->start(tid); cblk->lock.lock(); if (status == DEAD_OBJECT) { android_atomic_or(CBLK_INVALID_ON, &cblk->flags); @@ -591,26 +599,6 @@ status_t AudioTrack::setLoop_l(uint32_t loopStart, uint32_t loopEnd, int loopCou return NO_ERROR; } -status_t AudioTrack::getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount) const -{ - AutoMutex lock(mLock); - if (loopStart != NULL) { - *loopStart = mCblk->loopStart; - } - if (loopEnd != NULL) { - *loopEnd = mCblk->loopEnd; - } - if (loopCount != NULL) { - if (mCblk->loopCount < 0) { - *loopCount = -1; - } else { - *loopCount = mCblk->loopCount; - } - } - - return NO_ERROR; -} - status_t AudioTrack::setMarkerPosition(uint32_t marker) { if (mCbf == NULL) return INVALID_OPERATION; @@ -895,7 +883,7 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) "user=%08x, server=%08x", this, cblk->user, cblk->server); //unlock cblk mutex before calling mAudioTrack->start() (see issue #1617140) cblk->lock.unlock(); - result = mAudioTrack->start(); + result = mAudioTrack->start(0); // callback thread hasn't changed cblk->lock.lock(); if (result == DEAD_OBJECT) { android_atomic_or(CBLK_INVALID_ON, &cblk->flags); @@ -927,7 +915,7 @@ create_new_track: if (mActive && (cblk->flags & CBLK_DISABLED_MSK)) { android_atomic_and(~CBLK_DISABLED_ON, &cblk->flags); ALOGW("obtainBuffer() track %p disabled, restarting", this); - mAudioTrack->start(); + mAudioTrack->start(0); // callback thread hasn't changed } cblk->waitTimeMs = 0; @@ -1218,7 +1206,7 @@ status_t AudioTrack::restoreTrack_l(audio_track_cblk_t*& cblk, bool fromStart) } } if (mActive) { - result = mAudioTrack->start(); + result = mAudioTrack->start(0); // callback thread hasn't changed ALOGW_IF(result != NO_ERROR, "restoreTrack_l() start() failed status %d", result); } if (fromStart && result == NO_ERROR) { diff --git a/media/libmedia/IAudioRecord.cpp b/media/libmedia/IAudioRecord.cpp index 8c7a96023498..6b473c943692 100644 --- a/media/libmedia/IAudioRecord.cpp +++ b/media/libmedia/IAudioRecord.cpp @@ -42,10 +42,11 @@ public: { } - virtual status_t start() + virtual status_t start(pid_t tid) { Parcel data, reply; data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor()); + data.writeInt32(tid); status_t status = remote()->transact(START, data, &reply); if (status == NO_ERROR) { status = reply.readInt32(); @@ -90,7 +91,7 @@ status_t BnAudioRecord::onTransact( } break; case START: { CHECK_INTERFACE(IAudioRecord, data, reply); - reply->writeInt32(start()); + reply->writeInt32(start(data.readInt32())); return NO_ERROR; } break; case STOP: { diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp index e6186193656b..37246424e0d3 100644 --- a/media/libmedia/IAudioTrack.cpp +++ b/media/libmedia/IAudioTrack.cpp @@ -58,10 +58,11 @@ public: return cblk; } - virtual status_t start() + virtual status_t start(pid_t tid) { Parcel data, reply; data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); + data.writeInt32(tid); status_t status = remote()->transact(START, data, &reply); if (status == NO_ERROR) { status = reply.readInt32(); @@ -130,7 +131,7 @@ status_t BnAudioTrack::onTransact( } break; case START: { CHECK_INTERFACE(IAudioTrack, data, reply); - reply->writeInt32(start()); + reply->writeInt32(start(data.readInt32())); return NO_ERROR; } break; case STOP: { diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 5c964b232330..878df2d3e815 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -540,7 +540,7 @@ status_t AudioFlinger::setMasterVolume(float value) Mutex::Autolock _l(mLock); mMasterVolume = value; - for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) + for (size_t i = 0; i < mPlaybackThreads.size(); i++) mPlaybackThreads.valueAt(i)->setMasterVolume(value); return NO_ERROR; @@ -572,7 +572,7 @@ status_t AudioFlinger::setMode(audio_mode_t mode) if (NO_ERROR == ret) { Mutex::Autolock _l(mLock); mMode = mode; - for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) + for (size_t i = 0; i < mPlaybackThreads.size(); i++) mPlaybackThreads.valueAt(i)->setMode(mode); } @@ -622,7 +622,7 @@ status_t AudioFlinger::setMasterMute(bool muted) Mutex::Autolock _l(mLock); mMasterMute = muted; - for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) + for (size_t i = 0; i < mPlaybackThreads.size(); i++) mPlaybackThreads.valueAt(i)->setMasterMute(muted); return NO_ERROR; @@ -665,7 +665,7 @@ status_t AudioFlinger::setStreamVolume(audio_stream_type_t stream, float value, mStreamTypes[stream].volume = value; if (thread == NULL) { - for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) { + for (size_t i = 0; i < mPlaybackThreads.size(); i++) { mPlaybackThreads.valueAt(i)->setStreamVolume(stream, value); } } else { @@ -928,7 +928,7 @@ void AudioFlinger::removeNotificationClient(pid_t pid) { Mutex::Autolock _l(mLock); - int index = mNotificationClients.indexOfKey(pid); + ssize_t index = mNotificationClients.indexOfKey(pid); if (index >= 0) { sp <NotificationClient> client = mNotificationClients.valueFor(pid); ALOGV("removeNotificationClient() %p, pid %d", client.get(), pid); @@ -936,9 +936,9 @@ void AudioFlinger::removeNotificationClient(pid_t pid) } ALOGV("%d died, releasing its sessions", pid); - int num = mAudioSessionRefs.size(); + size_t num = mAudioSessionRefs.size(); bool removed = false; - for (int i = 0; i< num; i++) { + for (size_t i = 0; i< num; ) { AudioSessionRef *ref = mAudioSessionRefs.itemAt(i); ALOGV(" pid %d @ %d", ref->pid, i); if (ref->pid == pid) { @@ -946,8 +946,9 @@ void AudioFlinger::removeNotificationClient(pid_t pid) mAudioSessionRefs.removeAt(i); delete ref; removed = true; - i--; num--; + } else { + i++; } } if (removed) { @@ -1238,7 +1239,7 @@ void AudioFlinger::ThreadBase::setEffectSuspended_l( void AudioFlinger::ThreadBase::checkSuspendOnAddEffectChain_l(const sp<EffectChain>& chain) { - int index = mSuspendedSessions.indexOfKey(chain->sessionId()); + ssize_t index = mSuspendedSessions.indexOfKey(chain->sessionId()); if (index < 0) { return; } @@ -1264,7 +1265,7 @@ void AudioFlinger::ThreadBase::updateSuspendedSessions_l(const effect_uuid_t *ty bool suspend, int sessionId) { - int index = mSuspendedSessions.indexOfKey(sessionId); + ssize_t index = mSuspendedSessions.indexOfKey(sessionId); KeyedVector <int, sp<SuspendedSessionDesc> > sessionEffects; @@ -3494,11 +3495,11 @@ bool AudioFlinger::PlaybackThread::Track::isReady() const { return false; } -status_t AudioFlinger::PlaybackThread::Track::start() +status_t AudioFlinger::PlaybackThread::Track::start(pid_t tid) { status_t status = NO_ERROR; - ALOGV("start(%d), calling pid %d session %d", - mName, IPCThreadState::self()->getCallingPid(), mSessionId); + ALOGV("start(%d), calling pid %d session %d tid %d", + mName, IPCThreadState::self()->getCallingPid(), mSessionId, tid); sp<ThreadBase> thread = mThread.promote(); if (thread != 0) { Mutex::Autolock _l(thread->mLock); @@ -3717,12 +3718,12 @@ getNextBuffer_exit: return NOT_ENOUGH_DATA; } -status_t AudioFlinger::RecordThread::RecordTrack::start() +status_t AudioFlinger::RecordThread::RecordTrack::start(pid_t tid) { sp<ThreadBase> thread = mThread.promote(); if (thread != 0) { RecordThread *recordThread = (RecordThread *)thread.get(); - return recordThread->start(this); + return recordThread->start(this, tid); } else { return BAD_VALUE; } @@ -3789,9 +3790,9 @@ AudioFlinger::PlaybackThread::OutputTrack::~OutputTrack() clearBufferQueue(); } -status_t AudioFlinger::PlaybackThread::OutputTrack::start() +status_t AudioFlinger::PlaybackThread::OutputTrack::start(pid_t tid) { - status_t status = Track::start(); + status_t status = Track::start(tid); if (status != NO_ERROR) { return status; } @@ -3821,7 +3822,7 @@ bool AudioFlinger::PlaybackThread::OutputTrack::write(int16_t* data, uint32_t fr uint32_t waitTimeLeftMs = mSourceThread->waitTimeMs(); if (!mActive && frames != 0) { - start(); + start(0); sp<ThreadBase> thread = mThread.promote(); if (thread != 0) { MixerThread *mixerThread = (MixerThread *)thread.get(); @@ -4056,8 +4057,8 @@ sp<IMemory> AudioFlinger::TrackHandle::getCblk() const { return mTrack->getCblk(); } -status_t AudioFlinger::TrackHandle::start() { - return mTrack->start(); +status_t AudioFlinger::TrackHandle::start(pid_t tid) { + return mTrack->start(tid); } void AudioFlinger::TrackHandle::stop() { @@ -4179,9 +4180,9 @@ sp<IMemory> AudioFlinger::RecordHandle::getCblk() const { return mRecordTrack->getCblk(); } -status_t AudioFlinger::RecordHandle::start() { +status_t AudioFlinger::RecordHandle::start(pid_t tid) { ALOGV("RecordHandle::start()"); - return mRecordTrack->start(); + return mRecordTrack->start(tid); } void AudioFlinger::RecordHandle::stop() { @@ -4473,9 +4474,9 @@ Exit: return track; } -status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrack) +status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrack, pid_t tid) { - ALOGV("RecordThread::start"); + ALOGV("RecordThread::start tid=%d", tid); sp <ThreadBase> strongMe = this; status_t status = NO_ERROR; { @@ -5176,8 +5177,8 @@ void AudioFlinger::acquireAudioSessionId(int audioSession) Mutex::Autolock _l(mLock); pid_t caller = IPCThreadState::self()->getCallingPid(); ALOGV("acquiring %d from %d", audioSession, caller); - int num = mAudioSessionRefs.size(); - for (int i = 0; i< num; i++) { + size_t num = mAudioSessionRefs.size(); + for (size_t i = 0; i< num; i++) { AudioSessionRef *ref = mAudioSessionRefs.editItemAt(i); if (ref->sessionid == audioSession && ref->pid == caller) { ref->cnt++; @@ -5194,8 +5195,8 @@ void AudioFlinger::releaseAudioSessionId(int audioSession) Mutex::Autolock _l(mLock); pid_t caller = IPCThreadState::self()->getCallingPid(); ALOGV("releasing %d from %d", audioSession, caller); - int num = mAudioSessionRefs.size(); - for (int i = 0; i< num; i++) { + size_t num = mAudioSessionRefs.size(); + for (size_t i = 0; i< num; i++) { AudioSessionRef *ref = mAudioSessionRefs.itemAt(i); if (ref->sessionid == audioSession && ref->pid == caller) { ref->cnt--; @@ -7177,12 +7178,12 @@ status_t AudioFlinger::EffectChain::addEffect_l(const sp<EffectModule>& effect) // Reject insertion if an effect with EFFECT_FLAG_INSERT_EXCLUSIVE is // already present - int size = (int)mEffects.size(); - int idx_insert = size; - int idx_insert_first = -1; - int idx_insert_last = -1; + size_t size = mEffects.size(); + size_t idx_insert = size; + ssize_t idx_insert_first = -1; + ssize_t idx_insert_last = -1; - for (int i = 0; i < size; i++) { + for (size_t i = 0; i < size; i++) { effect_descriptor_t d = mEffects[i]->desc(); uint32_t iMode = d.flags & EFFECT_FLAG_TYPE_MASK; uint32_t iPref = d.flags & EFFECT_FLAG_INSERT_MASK; @@ -7251,11 +7252,10 @@ status_t AudioFlinger::EffectChain::addEffect_l(const sp<EffectModule>& effect) size_t AudioFlinger::EffectChain::removeEffect_l(const sp<EffectModule>& effect) { Mutex::Autolock _l(mLock); - int size = (int)mEffects.size(); - int i; + size_t size = mEffects.size(); uint32_t type = effect->desc().flags & EFFECT_FLAG_TYPE_MASK; - for (i = 0; i < size; i++) { + for (size_t i = 0; i < size; i++) { if (effect == mEffects[i]) { // calling stop here will remove pre-processing effect from the audio HAL. // This is safe as we hold the EffectChain mutex which guarantees that we are not in @@ -7402,7 +7402,7 @@ void AudioFlinger::EffectChain::setEffectSuspended_l( sp<SuspendedEffectDesc> desc; // use effect type UUID timelow as key as there is no real risk of identical // timeLow fields among effect type UUIDs. - int index = mSuspendedEffects.indexOfKey(type->timeLow); + ssize_t index = mSuspendedEffects.indexOfKey(type->timeLow); if (suspend) { if (index >= 0) { desc = mSuspendedEffects.valueAt(index); @@ -7452,7 +7452,7 @@ void AudioFlinger::EffectChain::setEffectSuspendedAll_l(bool suspend) { sp<SuspendedEffectDesc> desc; - int index = mSuspendedEffects.indexOfKey((int)kKeyForSuspendAll); + ssize_t index = mSuspendedEffects.indexOfKey((int)kKeyForSuspendAll); if (suspend) { if (index >= 0) { desc = mSuspendedEffects.valueAt(index); @@ -7534,7 +7534,7 @@ sp<AudioFlinger::EffectModule> AudioFlinger::EffectChain::getEffectIfEnabled( void AudioFlinger::EffectChain::checkSuspendOnEffectEnabled(const sp<EffectModule>& effect, bool enabled) { - int index = mSuspendedEffects.indexOfKey(effect->desc().type.timeLow); + ssize_t index = mSuspendedEffects.indexOfKey(effect->desc().type.timeLow); if (enabled) { if (index < 0) { // if the effect is not suspend check if all effects are suspended diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index fdcd9166e209..aa0ee7630785 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -314,7 +314,7 @@ private: int sessionId); virtual ~TrackBase(); - virtual status_t start() = 0; + virtual status_t start(pid_t tid) = 0; virtual void stop() = 0; sp<IMemory> getCblk() const { return mCblkMemory; } audio_track_cblk_t* cblk() const { return mCblk; } @@ -586,7 +586,7 @@ private: virtual ~Track(); void dump(char* buffer, size_t size); - virtual status_t start(); + virtual status_t start(pid_t tid); virtual void stop(); void pause(); @@ -668,7 +668,7 @@ private: int frameCount); virtual ~OutputTrack(); - virtual status_t start(); + virtual status_t start(pid_t tid); virtual void stop(); bool write(int16_t* data, uint32_t frames); bool bufferQueueEmpty() const { return (mBufferQueue.size() == 0) ? true : false; } @@ -905,7 +905,7 @@ private: TrackHandle(const sp<PlaybackThread::Track>& track); virtual ~TrackHandle(); virtual sp<IMemory> getCblk() const; - virtual status_t start(); + virtual status_t start(pid_t tid); virtual void stop(); virtual void flush(); virtual void mute(bool); @@ -943,7 +943,7 @@ private: int sessionId); virtual ~RecordTrack(); - virtual status_t start(); + virtual status_t start(pid_t tid); virtual void stop(); bool overflow() { bool tmp = mOverflow; mOverflow = false; return tmp; } @@ -988,6 +988,7 @@ private: status_t *status); status_t start(RecordTrack* recordTrack); + status_t start(RecordTrack* recordTrack, pid_t tid); void stop(RecordTrack* recordTrack); status_t dump(int fd, const Vector<String16>& args); AudioStreamIn* getInput() const; @@ -1028,7 +1029,7 @@ private: RecordHandle(const sp<RecordThread::RecordTrack>& recordTrack); virtual ~RecordHandle(); virtual sp<IMemory> getCblk() const; - virtual status_t start(); + virtual status_t start(pid_t tid); virtual void stop(); virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp index 21b5811ac374..041b5a869b0a 100644 --- a/services/audioflinger/AudioPolicyService.cpp +++ b/services/audioflinger/AudioPolicyService.cpp @@ -768,7 +768,7 @@ status_t AudioPolicyService::AudioCommandThread::dump(int fd) snprintf(buffer, SIZE, "- Commands:\n"); result = String8(buffer); result.append(" Command Time Wait pParam\n"); - for (int i = 0; i < (int)mAudioCommands.size(); i++) { + for (size_t i = 0; i < mAudioCommands.size(); i++) { mAudioCommands[i]->dump(buffer, SIZE); result.append(buffer); } @@ -902,7 +902,7 @@ status_t AudioPolicyService::AudioCommandThread::voiceVolumeCommand(float volume // insertCommand_l() must be called with mLock held void AudioPolicyService::AudioCommandThread::insertCommand_l(AudioCommand *command, int delayMs) { - ssize_t i; + ssize_t i; // not size_t because i will count down to -1 Vector <AudioCommand *> removedCommands; command->mTime = systemTime() + milliseconds(delayMs); |