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