1e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber#ifndef SINE_SOURCE_H_
2e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
3e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber#define SINE_SOURCE_H_
4e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
5e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber#include <media/stagefright/MediaSource.h>
6e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
7e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Hubernamespace android {
8e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
9e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huberstruct MediaBufferGroup;
10e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
11e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huberstruct SineSource : public MediaSource {
12e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    SineSource(int32_t sampleRate, int32_t numChannels);
13e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
14e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    virtual status_t start(MetaData *params);
15e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    virtual status_t stop();
16e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
17e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    virtual sp<MetaData> getFormat();
18e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
19e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    virtual status_t read(
20e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber            MediaBuffer **out, const ReadOptions *options = NULL);
21e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
22e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huberprotected:
23e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    virtual ~SineSource();
24e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
25e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huberprivate:
26e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    enum { kBufferSize = 8192 };
27e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    static const double kFrequency = 500.0;
28e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
29e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    bool mStarted;
30e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    int32_t mSampleRate;
31e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    int32_t mNumChannels;
32e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    size_t mPhase;
33e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
34e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber    MediaBufferGroup *mGroup;
35e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber};
36e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
37e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber}  // namespace android
38e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber
39e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber#endif // SINE_SOURCE_H_
40