blob: ceb254fb411ad1f08f38592f965208ba3c94fd12 [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
Dima Zavin24fc2fb2011-04-19 22:30:36 -070014#include <hardware/audio.h>
15
Andreas Huber8768f2c2009-12-01 15:26:54 -080016using 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(), OK);
28
Andreas Huber07bf09d2010-01-25 14:27:12 -080029#if 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080030 sp<MediaSource> source = new SineSource(kSampleRate, kNumChannels);
Andreas Huber07bf09d2010-01-25 14:27:12 -080031#else
32 sp<MediaSource> source = new AudioSource(
33 AUDIO_SOURCE_DEFAULT,
34 kSampleRate,
35 kNumChannels == 1
Dima Zavin24fc2fb2011-04-19 22:30:36 -070036 ? AUDIO_CHANNEL_IN_MONO
37 : AUDIO_CHANNEL_IN_STEREO);
Andreas Huber07bf09d2010-01-25 14:27:12 -080038#endif
Andreas Huber8768f2c2009-12-01 15:26:54 -080039
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
Andreas Huber91eb0352009-12-07 09:43:00 -080055 sp<MediaSource> encoder = OMXCodec::Create(
Andreas Huber8768f2c2009-12-01 15:26:54 -080056 client.interface(),
57 meta, true /* createEncoder */,
58 source);
59
Andreas Huber07bf09d2010-01-25 14:27:12 -080060#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
Andreas Huber91eb0352009-12-07 09:43:00 -080067 sp<MediaSource> decoder = OMXCodec::Create(
Andreas Huber8768f2c2009-12-01 15:26:54 -080068 client.interface(),
69 meta, false /* createEncoder */,
70 encoder);
71
Andreas Huber07bf09d2010-01-25 14:27:12 -080072#if 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080073 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;
Andreas Huber07bf09d2010-01-25 14:27:12 -080084#elif 0
Andreas Huber8768f2c2009-12-01 15:26:54 -080085 CHECK_EQ(decoder->start(), 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(), OK);
99#endif
Andreas Huber07bf09d2010-01-25 14:27:12 -0800100#endif
Andreas Huber8768f2c2009-12-01 15:26:54 -0800101
102 return 0;
103}