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