blob: 70f5944e9a221cd2b4c7425502dc20145f9863e5 [file] [log] [blame]
Dharmaray Kundargi643290d2011-01-16 16:02:42 -08001/*
2 * Copyright (C) 2011 NXP Software
3 * Copyright (C) 2011 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#define LOG_NDEBUG 1
19#define LOG_TAG "DummyAudioSource"
20#include "utils/Log.h"
21
22#include <media/stagefright/MediaErrors.h>
23#include <media/stagefright/MediaDebug.h>
24#include <media/stagefright/MediaDefs.h>
25#include <media/stagefright/MediaBuffer.h>
26#include <media/stagefright/MediaBufferGroup.h>
27#include <media/stagefright/MetaData.h>
28
29
30#include "DummyAudioSource.h"
31
32
33
34/* Android includes*/
35#include <utils/Log.h>
36#include <memory.h>
37
38
39/*---------------------*/
40/* DEBUG LEVEL SETUP */
41/*---------------------*/
42#define LOG1 LOGE /*ERRORS Logging*/
43#define LOG2 LOGV /*WARNING Logging*/
44#define LOG3 //LOGV /*COMMENTS Logging*/
45
46/*---------------------*/
47/* CONSTANTS */
48/*---------------------*/
49
50
51namespace android {
52
53
54/*---------------------*/
55/* SEEK SOURCE */
56/*---------------------*/
57
58//static
59sp<DummyAudioSource> DummyAudioSource::Create(int32_t samplingRate,
60 int32_t channelCount,
61 int64_t frameDurationUs,
62 int64_t audioDurationUs) {
63 LOG2("DummyAudioSource::Create ");
64 sp<DummyAudioSource> aSource = new DummyAudioSource (samplingRate,
65 channelCount,
66 frameDurationUs,
67 audioDurationUs);
68 return aSource;
69}
70
71
72DummyAudioSource::DummyAudioSource (int32_t samplingRate,
73 int32_t channelCount,
74 int64_t frameDurationUs,
75 int64_t audioDurationUs):
76 mSamplingRate(samplingRate),
77 mChannelCount(channelCount),
78 mFrameDurationUs(frameDurationUs),
79 mAudioDurationUs(audioDurationUs),
80 mTimeStampUs(0) ,
81 mNumberOfSamplePerFrame(0),
82 mBufferGroup(NULL){
83 LOG2("DummyAudioSource::DummyAudioSource constructor START");
84 /* Do nothing here? */
85 LOG2("DummyAudioSource::DummyAudioSource");
86 LOG2("DummyAudioSource:: mSamplingRate = %d",samplingRate);
87 LOG2("DummyAudioSource:: mChannelCount = %d",channelCount);
88 LOG2("DummyAudioSource:: frameDurationUs = %lld",frameDurationUs);
89 LOG2("DummyAudioSource:: mAudioDurationUs = %lld",mAudioDurationUs);
90
91 LOG2("DummyAudioSource::DummyAudioSource constructor END");
92}
93
94
95DummyAudioSource::~DummyAudioSource () {
96 /* Do nothing here? */
97 LOG2("DummyAudioSource::~DummyAudioSource");
98}
99
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800100void DummyAudioSource::setDuration (int64_t audioDurationUs) {
101 Mutex::Autolock autoLock(mLock);
102 LOG2("SetDuration %lld", mAudioDurationUs);
103 mAudioDurationUs += audioDurationUs;
104 LOG2("SetDuration %lld", mAudioDurationUs);
105}
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800106
107status_t DummyAudioSource::start(MetaData *params) {
108 status_t err = OK;
109 LOG2("DummyAudioSource::start START");
110
111 mTimeStampUs = 0;
112 mNumberOfSamplePerFrame = (int32_t) ((1L * mSamplingRate * mFrameDurationUs)/1000000);
113 mNumberOfSamplePerFrame = mNumberOfSamplePerFrame * mChannelCount;
114
115 mBufferGroup = new MediaBufferGroup;
116 mBufferGroup->add_buffer(
117 new MediaBuffer(mNumberOfSamplePerFrame * sizeof(int16_t)));
118
119 LOG2("DummyAudioSource:: mNumberOfSamplePerFrame = %d",mNumberOfSamplePerFrame);
120 LOG2("DummyAudioSource::start END");
121
122 return err;
123}
124
125
126status_t DummyAudioSource::stop() {
127 status_t err = OK;
128
129 LOG2("DummyAudioSource::stop START");
130
131 delete mBufferGroup;
132 mBufferGroup = NULL;
133
134
135 LOG2("DummyAudioSource::stop END");
136
137 return err;
138}
139
140
141sp<MetaData> DummyAudioSource::getFormat() {
142 LOG2("DummyAudioSource::getFormat");
143
144 sp<MetaData> meta = new MetaData;
145
146 meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_RAW);
147 meta->setInt32(kKeyChannelCount, mChannelCount);
148 meta->setInt32(kKeySampleRate, mSamplingRate);
149 meta->setInt64(kKeyDuration, mFrameDurationUs);
150
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800151 meta->setCString(kKeyDecoderComponent, "DummyAudioSource");
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800152
153 return meta;
154}
155
156status_t DummyAudioSource::read( MediaBuffer **out, const MediaSource::ReadOptions *options) {
157 status_t err = OK;
158 //LOG2("DummyAudioSource::read START");
159 MediaBuffer *buffer;
160 int32_t byteCount;
161 int64_t seekTimeUs;
162 ReadOptions::SeekMode mode;
163
164 if (options && options->getSeekTo(&seekTimeUs, &mode)) {
165 CHECK(seekTimeUs >= 0);
166 mTimeStampUs = seekTimeUs;
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800167 }
168 {
169 Mutex::Autolock autoLock(mLock);
170 if (mTimeStampUs >= mAudioDurationUs) {
171 *out = NULL;
172 LOGI("EOS reached");
173 return ERROR_END_OF_STREAM;
174 }
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800175 }
176
177 err = mBufferGroup->acquire_buffer(&buffer);
178 if (err != OK) {
179 return err;
180 }
181
182 uint8_t *inputPtr =
183 ( uint8_t *)buffer->data() + buffer->range_offset();
184
185 //TODO: replace with memset
186 for (byteCount = 0; byteCount < (mNumberOfSamplePerFrame << 1); byteCount++) {
187 inputPtr[byteCount] = 0;
188 }
189
190 buffer->set_range(buffer->range_offset(), (mNumberOfSamplePerFrame << 1));
191
192 buffer->meta_data()->setInt64(kKeyTime, mTimeStampUs);
193 LOG2("DummyAudioSource::read Buffer_offset = %d,"
194 "Buffer_Size = %d, mTimeStampUs = %lld",
195 buffer->range_offset(),buffer->size(),mTimeStampUs);
196 mTimeStampUs = mTimeStampUs + mFrameDurationUs;
197 *out = buffer;
198 return err;
199}
200
201}// namespace android