Home | History | Annotate | Download | only in stagefright
      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 
     16 using namespace android;
     17 
     18 int 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             audio_channel_in_mask_from_count(kNumChannels));
     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(), (status_t)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(), (status_t)OK);
     97 #endif
     98 #endif
     99 
    100     return 0;
    101 }
    102