audioloop.cpp revision e7c9cb48fec02697227bd847cd2e69432659adfd
1#include "SineSource.h"
2
3#include <binder/ProcessState.h>
4#include <media/mediarecorder.h>
5#include <media/stagefright/AMRWriter.h>
6#include <media/stagefright/AudioPlayer.h>
7#include <media/stagefright/AudioSource.h>
8#include <media/stagefright/MediaDebug.h>
9#include <media/stagefright/MediaDefs.h>
10#include <media/stagefright/MetaData.h>
11#include <media/stagefright/OMXClient.h>
12#include <media/stagefright/OMXCodec.h>
13
14using namespace android;
15
16int main() {
17    // We only have an AMR-WB encoder on sholes...
18    static bool outputWBAMR = false;
19    static const int32_t kSampleRate = outputWBAMR ? 16000 : 8000;
20    static const int32_t kNumChannels = 1;
21
22    android::ProcessState::self()->startThreadPool();
23
24    OMXClient client;
25    CHECK_EQ(client.connect(), OK);
26
27#if 0
28    sp<MediaSource> source = new SineSource(kSampleRate, kNumChannels);
29#else
30    sp<MediaSource> source = new AudioSource(
31            AUDIO_SOURCE_DEFAULT,
32            kSampleRate,
33            kNumChannels == 1
34                ? AudioSystem::CHANNEL_IN_MONO
35                : AudioSystem::CHANNEL_IN_STEREO);
36#endif
37
38    sp<MetaData> meta = new MetaData;
39
40    meta->setCString(
41            kKeyMIMEType,
42            outputWBAMR ? MEDIA_MIMETYPE_AUDIO_AMR_WB
43                        : MEDIA_MIMETYPE_AUDIO_AMR_NB);
44
45    meta->setInt32(kKeyChannelCount, kNumChannels);
46    meta->setInt32(kKeySampleRate, kSampleRate);
47
48    int32_t maxInputSize;
49    if (source->getFormat()->findInt32(kKeyMaxInputSize, &maxInputSize)) {
50        meta->setInt32(kKeyMaxInputSize, maxInputSize);
51    }
52
53    sp<MediaSource> encoder = OMXCodec::Create(
54            client.interface(),
55            meta, true /* createEncoder */,
56            source);
57
58#if 1
59    sp<AMRWriter> writer = new AMRWriter("/sdcard/out.amr");
60    writer->addSource(encoder);
61    writer->start();
62    sleep(10);
63    writer->stop();
64#else
65    sp<MediaSource> decoder = OMXCodec::Create(
66            client.interface(),
67            meta, false /* createEncoder */,
68            encoder);
69
70#if 0
71    AudioPlayer *player = new AudioPlayer(NULL);
72    player->setSource(decoder);
73
74    player->start();
75
76    sleep(10);
77
78    player->stop();
79
80    delete player;
81    player = NULL;
82#elif 0
83    CHECK_EQ(decoder->start(), OK);
84
85    MediaBuffer *buffer;
86    while (decoder->read(&buffer) == OK) {
87        // do something with buffer
88
89        putchar('.');
90        fflush(stdout);
91
92        buffer->release();
93        buffer = NULL;
94    }
95
96    CHECK_EQ(decoder->stop(), OK);
97#endif
98#endif
99
100    return 0;
101}
102