summaryrefslogtreecommitdiffstats
path: root/libs/audioflinger/AudioPolicyService.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/audioflinger/AudioPolicyService.h')
-rw-r--r--libs/audioflinger/AudioPolicyService.h23
1 files changed, 14 insertions, 9 deletions
diff --git a/libs/audioflinger/AudioPolicyService.h b/libs/audioflinger/AudioPolicyService.h
index 3909fa4..56a85e1 100644
--- a/libs/audioflinger/AudioPolicyService.h
+++ b/libs/audioflinger/AudioPolicyService.h
@@ -20,6 +20,7 @@
#include <media/IAudioPolicyService.h>
#include <hardware_legacy/AudioPolicyInterface.h>
#include <media/ToneGenerator.h>
+#include <utils/Vector.h>
namespace android {
@@ -98,9 +99,9 @@ public:
uint32_t *pChannels,
uint32_t acoustics);
virtual status_t closeInput(audio_io_handle_t input);
- virtual status_t setStreamVolume(AudioSystem::stream_type stream, float volume, audio_io_handle_t output);
+ virtual status_t setStreamVolume(AudioSystem::stream_type stream, float volume, audio_io_handle_t output, int delayMs = 0);
virtual status_t setStreamOutput(AudioSystem::stream_type stream, audio_io_handle_t output);
- virtual void setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs);
+ virtual void setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs, int delayMs = 0);
virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys);
virtual status_t startTone(ToneGenerator::tone_type tone, AudioSystem::stream_type stream);
virtual status_t stopTone();
@@ -116,6 +117,7 @@ private:
// For audio config commands, it is necessary because audio flinger requires that the calling process (user)
// has permission to modify audio settings.
class AudioCommandThread : public Thread {
+ class AudioCommand;
public:
// commands for tone AudioCommand
@@ -136,15 +138,20 @@ private:
void exit();
void startToneCommand(int type = 0, int stream = 0);
void stopToneCommand();
- status_t volumeCommand(int stream, float volume, int output);
- status_t parametersCommand(int ioHandle, const String8& keyValuePairs);
+ status_t volumeCommand(int stream, float volume, int output, int delayMs = 0);
+ status_t parametersCommand(int ioHandle, const String8& keyValuePairs, int delayMs = 0);
+ void insertCommand_l(AudioCommand *command, int delayMs = 0);
private:
// descriptor for requested tone playback event
class AudioCommand {
public:
int mCommand; // START_TONE, STOP_TONE ...
- void *mParam;
+ nsecs_t mTime; // time stamp
+ 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)
};
class ToneData {
@@ -168,9 +175,7 @@ private:
Mutex mLock;
Condition mWaitWorkCV;
- Vector<AudioCommand *> mAudioCommands; // list of pending tone events
- Condition mCommandCond;
- status_t mCommandStatus;
+ Vector <AudioCommand *> mAudioCommands; // list of pending commands
ToneGenerator *mpToneGenerator; // the tone generator
};
@@ -182,7 +187,7 @@ private:
// connection stated our routing
AudioPolicyInterface* mpPolicyManager; // the platform specific policy manager
sp <AudioCommandThread> mAudioCommandThread; // audio commands thread
- sp <AudioCommandThread> mTonePlaybacThread; // tone playback thread
+ sp <AudioCommandThread> mTonePlaybackThread; // tone playback thread
};
}; // namespace android