1f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin/* //device/servers/AudioFlinger/AudioDumpInterface.h
2f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin**
3f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Copyright 2008, The Android Open Source Project
4f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin**
5f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Licensed under the Apache License, Version 2.0 (the "License");
6f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** you may not use this file except in compliance with the License.
7f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** You may obtain a copy of the License at
8f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin**
9f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin**     http://www.apache.org/licenses/LICENSE-2.0
10f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin**
11f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** Unless required by applicable law or agreed to in writing, software
12f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** distributed under the License is distributed on an "AS IS" BASIS,
13f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** See the License for the specific language governing permissions and
15f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin** limitations under the License.
16f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin*/
17f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
18f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#ifndef ANDROID_AUDIO_DUMP_INTERFACE_H
19f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define ANDROID_AUDIO_DUMP_INTERFACE_H
20f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
21f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <stdint.h>
22f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <sys/types.h>
23f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/String8.h>
24f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <utils/SortedVector.h>
25f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
26f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#include <hardware_legacy/AudioHardwareBase.h>
27f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
28f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinnamespace android {
29f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
30f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#define AUDIO_DUMP_WAVE_HDR_SIZE 44
31f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
32f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioDumpInterface;
33f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
34f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamOutDump : public AudioStreamOut {
35f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic:
36f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                        AudioStreamOutDump(AudioDumpInterface *interface,
37f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            int id,
38f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            AudioStreamOut* finalStream,
39f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t devices,
40f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            int format,
41f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t channels,
42f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t sampleRate);
43f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                        ~AudioStreamOutDump();
44f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
45f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual ssize_t     write(const void* buffer, size_t bytes);
46f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual uint32_t    sampleRate() const;
47f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual size_t      bufferSize() const;
48f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual uint32_t    channels() const;
49f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual int         format() const;
50f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual uint32_t    latency() const;
51f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setVolume(float left, float right);
52f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    standby();
53f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setParameters(const String8& keyValuePairs);
54f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual String8     getParameters(const String8& keys);
55f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    dump(int fd, const Vector<String16>& args);
56f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    void                Close(void);
57f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioStreamOut*     finalStream() { return mFinalStream; }
58f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t            device() { return mDevice; }
59f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    int                 getId()  { return mId; }
60f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    getRenderPosition(uint32_t *dspFrames);
61f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
62f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate:
63f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioDumpInterface *mInterface;
64f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    int                  mId;
65f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mSampleRate;               //
66f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mFormat;                   //
67f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mChannels;                 // output configuration
68f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mLatency;                  //
69f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mDevice;                   // current device this output is routed to
70f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    size_t  mBufferSize;
71f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioStreamOut      *mFinalStream;
72f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    FILE                *mFile;      // output file
73f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    int                 mFileCount;
74f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin};
75f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
76f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioStreamInDump : public AudioStreamIn {
77f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic:
78f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                        AudioStreamInDump(AudioDumpInterface *interface,
79f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            int id,
80f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            AudioStreamIn* finalStream,
81f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t devices,
82f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            int format,
83f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t channels,
84f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                            uint32_t sampleRate);
85f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                        ~AudioStreamInDump();
86f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
87f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual uint32_t    sampleRate() const;
88f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual size_t      bufferSize() const;
89f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual uint32_t    channels() const;
90f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual int         format() const;
91f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
92f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setGain(float gain);
93f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual ssize_t     read(void* buffer, ssize_t bytes);
94f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    standby();
95f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setParameters(const String8& keyValuePairs);
96f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual String8     getParameters(const String8& keys);
97f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual unsigned int  getInputFramesLost() const;
98f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    dump(int fd, const Vector<String16>& args);
99f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    void                Close(void);
100f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioStreamIn*     finalStream() { return mFinalStream; }
101f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t            device() { return mDevice; }
102f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
103f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprivate:
104f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioDumpInterface *mInterface;
105f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    int                  mId;
106f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mSampleRate;               //
107f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mFormat;                   //
108f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mChannels;                 // output configuration
109f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    uint32_t mDevice;                   // current device this output is routed to
110f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    size_t  mBufferSize;
111f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioStreamIn      *mFinalStream;
112f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    FILE                *mFile;      // output file
113f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    int                 mFileCount;
114f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin};
115f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
116f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinclass AudioDumpInterface : public AudioHardwareBase
117f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin{
118f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
119f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinpublic:
120f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                        AudioDumpInterface(AudioHardwareInterface* hw);
121f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual AudioStreamOut* openOutputStream(
122f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                uint32_t devices,
123f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                int *format=0,
124f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                uint32_t *channels=0,
125f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                uint32_t *sampleRate=0,
126f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                                status_t *status=0);
127f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual    void        closeOutputStream(AudioStreamOut* out);
128f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
129f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual             ~AudioDumpInterface();
130f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
131f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    initCheck()
132f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                            {return mFinalInterface->initCheck();}
133f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setVoiceVolume(float volume)
134f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                            {return mFinalInterface->setVoiceVolume(volume);}
135f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setMasterVolume(float volume)
136f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                            {return mFinalInterface->setMasterVolume(volume);}
137f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
138f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setMode(int mode);
139f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
140f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    // mic mute
141f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setMicMute(bool state)
142f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                            {return mFinalInterface->setMicMute(state);}
143f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    getMicMute(bool* state)
144f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin                            {return mFinalInterface->getMicMute(state);}
145f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
146f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    setParameters(const String8& keyValuePairs);
147f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual String8     getParameters(const String8& keys);
148f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
149f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual size_t      getInputBufferSize(uint32_t sampleRate, int format, int channelCount);
150f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
151f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual AudioStreamIn* openInputStream(uint32_t devices, int *format, uint32_t *channels,
152f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin            uint32_t *sampleRate, status_t *status, AudioSystem::audio_in_acoustics acoustics);
153f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual    void        closeInputStream(AudioStreamIn* in);
154f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
155f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    virtual status_t    dump(int fd, const Vector<String16>& args) { return mFinalInterface->dumpState(fd, args); }
156f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
157f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin            String8     fileName() const { return mFileName; }
158f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavinprotected:
159f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
160f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    AudioHardwareInterface          *mFinalInterface;
161f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    SortedVector<AudioStreamOutDump *>   mOutputs;
162f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    SortedVector<AudioStreamInDump *>    mInputs;
163f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    Mutex                           mLock;
164f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    String8                         mPolicyCommands;
165f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin    String8                         mFileName;
166f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin};
167f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
168f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin}; // namespace android
169f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin
170f01215993dda68b6b52111d754bd0c7c2d5bcfa3Dima Zavin#endif // ANDROID_AUDIO_DUMP_INTERFACE_H
171