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