blob: 87336629f2b2685c6715abc1ae3cb2aaa6225671 [file] [log] [blame]
Andreas Huber8768f2c2009-12-01 15:26:54 -08001#include "SineSource.h"
2
3#include <binder/ProcessState.h>
Andreas Huber07bf09d2010-01-25 14:27:12 -08004#include <media/mediarecorder.h>
5#include <media/stagefright/AMRWriter.h>
Andreas Huber8768f2c2009-12-01 15:26:54 -08006#include <media/stagefright/AudioPlayer.h>
Andreas Huber07bf09d2010-01-25 14:27:12 -08007#include <media/stagefright/AudioSource.h>
Andreas Huber8768f2c2009-12-01 15:26:54 -08008#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
Andreas Huber07bf09d2010-01-25 14:27:12 -080027#if 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080028 sp<MediaSource> source = new SineSource(kSampleRate, kNumChannels);
Andreas Huber07bf09d2010-01-25 14:27:12 -080029#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
Andreas Huber8768f2c2009-12-01 15:26:54 -080037
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
Andreas Huber91eb0352009-12-07 09:43:00 -080053 sp<MediaSource> encoder = OMXCodec::Create(
Andreas Huber8768f2c2009-12-01 15:26:54 -080054 client.interface(),
55 meta, true /* createEncoder */,
56 source);
57
Andreas Huber07bf09d2010-01-25 14:27:12 -080058#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
Andreas Huber91eb0352009-12-07 09:43:00 -080065 sp<MediaSource> decoder = OMXCodec::Create(
Andreas Huber8768f2c2009-12-01 15:26:54 -080066 client.interface(),
67 meta, false /* createEncoder */,
68 encoder);
69
Andreas Huber07bf09d2010-01-25 14:27:12 -080070#if 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080071 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;
Andreas Huber07bf09d2010-01-25 14:27:12 -080082#elif 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080083 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
Andreas Huber07bf09d2010-01-25 14:27:12 -080098#endif
Andreas Huber8768f2c2009-12-01 15:26:54 -080099
100 return 0;
101}