Loading services/audioflinger/AudioPolicyService.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -678,6 +678,10 @@ AudioPolicyService::AudioCommandThread::~AudioCommandThread() if (!mAudioCommands.isEmpty()) { release_wake_lock(mName.string()); } for (size_t k=0; k < mAudioCommands.size(); k++) { delete mAudioCommands[k]->mParam; delete mAudioCommands[k]; } mAudioCommands.clear(); delete mpToneGenerator; } Loading Loading @@ -849,7 +853,7 @@ void AudioPolicyService::AudioCommandThread::startToneCommand(ToneGenerator::ton ToneData *data = new ToneData(); data->mType = type; data->mStream = stream; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding tone start type %d, stream %d", type, stream); Loading Loading @@ -950,7 +954,7 @@ void AudioPolicyService::AudioCommandThread::stopOutputCommand(audio_io_handle_t data->mIO = output; data->mStream = stream; data->mSession = session; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding stop output %d", output); Loading @@ -963,7 +967,7 @@ void AudioPolicyService::AudioCommandThread::releaseOutputCommand(audio_io_handl command->mCommand = RELEASE_OUTPUT; ReleaseOutputData *data = new ReleaseOutputData(); data->mIO = output; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding release output %d", output); Loading Loading @@ -1052,6 +1056,10 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(AudioCommand *comma for (size_t k = i + 1; k < mAudioCommands.size(); k++) { if (mAudioCommands[k] == removedCommands[j]) { ALOGV("suppressing command: %d", mAudioCommands[k]->mCommand); // for commands that are not filtered, // command->mParam is deleted in threadLoop delete mAudioCommands[k]->mParam; delete mAudioCommands[k]; mAudioCommands.removeAt(k); break; } Loading services/audioflinger/AudioPolicyService.h +16 −7 Original line number Diff line number Diff line Loading @@ -197,6 +197,8 @@ private: void insertCommand_l(AudioCommand *command, int delayMs = 0); private: class AudioCommandData; // descriptor for requested tone playback event class AudioCommand { Loading @@ -211,41 +213,48 @@ private: Condition mCond; // condition for status return status_t mStatus; // command status bool mWaitStatus; // true if caller is waiting for status void *mParam; // command parameter (ToneData, VolumeData, ParametersData) AudioCommandData *mParam; // command specific parameter data }; class AudioCommandData { public: virtual ~AudioCommandData() {} protected: AudioCommandData() {} }; class ToneData { class ToneData : public AudioCommandData { public: ToneGenerator::tone_type mType; // tone type (START_TONE only) audio_stream_type_t mStream; // stream type (START_TONE only) }; class VolumeData { class VolumeData : public AudioCommandData { public: audio_stream_type_t mStream; float mVolume; audio_io_handle_t mIO; }; class ParametersData { class ParametersData : public AudioCommandData { public: audio_io_handle_t mIO; String8 mKeyValuePairs; }; class VoiceVolumeData { class VoiceVolumeData : public AudioCommandData { public: float mVolume; }; class StopOutputData { class StopOutputData : public AudioCommandData { public: audio_io_handle_t mIO; audio_stream_type_t mStream; int mSession; }; class ReleaseOutputData { class ReleaseOutputData : public AudioCommandData { public: audio_io_handle_t mIO; }; Loading Loading
services/audioflinger/AudioPolicyService.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -678,6 +678,10 @@ AudioPolicyService::AudioCommandThread::~AudioCommandThread() if (!mAudioCommands.isEmpty()) { release_wake_lock(mName.string()); } for (size_t k=0; k < mAudioCommands.size(); k++) { delete mAudioCommands[k]->mParam; delete mAudioCommands[k]; } mAudioCommands.clear(); delete mpToneGenerator; } Loading Loading @@ -849,7 +853,7 @@ void AudioPolicyService::AudioCommandThread::startToneCommand(ToneGenerator::ton ToneData *data = new ToneData(); data->mType = type; data->mStream = stream; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding tone start type %d, stream %d", type, stream); Loading Loading @@ -950,7 +954,7 @@ void AudioPolicyService::AudioCommandThread::stopOutputCommand(audio_io_handle_t data->mIO = output; data->mStream = stream; data->mSession = session; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding stop output %d", output); Loading @@ -963,7 +967,7 @@ void AudioPolicyService::AudioCommandThread::releaseOutputCommand(audio_io_handl command->mCommand = RELEASE_OUTPUT; ReleaseOutputData *data = new ReleaseOutputData(); data->mIO = output; command->mParam = (void *)data; command->mParam = data; Mutex::Autolock _l(mLock); insertCommand_l(command); ALOGV("AudioCommandThread() adding release output %d", output); Loading Loading @@ -1052,6 +1056,10 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(AudioCommand *comma for (size_t k = i + 1; k < mAudioCommands.size(); k++) { if (mAudioCommands[k] == removedCommands[j]) { ALOGV("suppressing command: %d", mAudioCommands[k]->mCommand); // for commands that are not filtered, // command->mParam is deleted in threadLoop delete mAudioCommands[k]->mParam; delete mAudioCommands[k]; mAudioCommands.removeAt(k); break; } Loading
services/audioflinger/AudioPolicyService.h +16 −7 Original line number Diff line number Diff line Loading @@ -197,6 +197,8 @@ private: void insertCommand_l(AudioCommand *command, int delayMs = 0); private: class AudioCommandData; // descriptor for requested tone playback event class AudioCommand { Loading @@ -211,41 +213,48 @@ private: Condition mCond; // condition for status return status_t mStatus; // command status bool mWaitStatus; // true if caller is waiting for status void *mParam; // command parameter (ToneData, VolumeData, ParametersData) AudioCommandData *mParam; // command specific parameter data }; class AudioCommandData { public: virtual ~AudioCommandData() {} protected: AudioCommandData() {} }; class ToneData { class ToneData : public AudioCommandData { public: ToneGenerator::tone_type mType; // tone type (START_TONE only) audio_stream_type_t mStream; // stream type (START_TONE only) }; class VolumeData { class VolumeData : public AudioCommandData { public: audio_stream_type_t mStream; float mVolume; audio_io_handle_t mIO; }; class ParametersData { class ParametersData : public AudioCommandData { public: audio_io_handle_t mIO; String8 mKeyValuePairs; }; class VoiceVolumeData { class VoiceVolumeData : public AudioCommandData { public: float mVolume; }; class StopOutputData { class StopOutputData : public AudioCommandData { public: audio_io_handle_t mIO; audio_stream_type_t mStream; int mSession; }; class ReleaseOutputData { class ReleaseOutputData : public AudioCommandData { public: audio_io_handle_t mIO; }; Loading