blob: db1b573247df98bd379bc00e16c7f5f77d462790 [file] [log] [blame]
Dharmaray Kundargi643290d2011-01-16 16:02:42 -08001/*
Dharmaray Kundargi643290d2011-01-16 16:02:42 -08002 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_NDEBUG 1
18#define LOG_TAG "DummyAudioSource"
19#include "utils/Log.h"
20
21#include <media/stagefright/MediaErrors.h>
22#include <media/stagefright/MediaDebug.h>
23#include <media/stagefright/MediaDefs.h>
24#include <media/stagefright/MediaBuffer.h>
25#include <media/stagefright/MediaBufferGroup.h>
26#include <media/stagefright/MetaData.h>
27
28
29#include "DummyAudioSource.h"
30
31
32
33/* Android includes*/
34#include <utils/Log.h>
35#include <memory.h>
36
37
38/*---------------------*/
39/* DEBUG LEVEL SETUP */
40/*---------------------*/
41#define LOG1 LOGE /*ERRORS Logging*/
42#define LOG2 LOGV /*WARNING Logging*/
43#define LOG3 //LOGV /*COMMENTS Logging*/
44
45/*---------------------*/
46/* CONSTANTS */
47/*---------------------*/
48
49
50namespace android {
51
52
53/*---------------------*/
54/* SEEK SOURCE */
55/*---------------------*/
56
57//static
58sp<DummyAudioSource> DummyAudioSource::Create(int32_t samplingRate,
59 int32_t channelCount,
60 int64_t frameDurationUs,
61 int64_t audioDurationUs) {
62 LOG2("DummyAudioSource::Create ");
63 sp<DummyAudioSource> aSource = new DummyAudioSource (samplingRate,
64 channelCount,
65 frameDurationUs,
66 audioDurationUs);
67 return aSource;
68}
69
70
71DummyAudioSource::DummyAudioSource (int32_t samplingRate,
72 int32_t channelCount,
73 int64_t frameDurationUs,
74 int64_t audioDurationUs):
75 mSamplingRate(samplingRate),
76 mChannelCount(channelCount),
77 mFrameDurationUs(frameDurationUs),
Basavapatna Dattaguru100d0182011-03-04 09:48:24 -080078 mNumberOfSamplePerFrame(0),
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080079 mAudioDurationUs(audioDurationUs),
80 mTimeStampUs(0) ,
Basavapatna Dattaguru100d0182011-03-04 09:48:24 -080081
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080082 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;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800160 int64_t seekTimeUs;
161 ReadOptions::SeekMode mode;
162
163 if (options && options->getSeekTo(&seekTimeUs, &mode)) {
164 CHECK(seekTimeUs >= 0);
165 mTimeStampUs = seekTimeUs;
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800166 }
167 {
168 Mutex::Autolock autoLock(mLock);
169 if (mTimeStampUs >= mAudioDurationUs) {
170 *out = NULL;
171 LOGI("EOS reached");
172 return ERROR_END_OF_STREAM;
173 }
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800174 }
175
176 err = mBufferGroup->acquire_buffer(&buffer);
177 if (err != OK) {
178 return err;
179 }
180
James Dong2dbef652011-05-02 18:12:22 -0700181 memset((uint8_t *) buffer->data() + buffer->range_offset(),
182 0, mNumberOfSamplePerFrame << 1);
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800183
184 buffer->set_range(buffer->range_offset(), (mNumberOfSamplePerFrame << 1));
185
186 buffer->meta_data()->setInt64(kKeyTime, mTimeStampUs);
187 LOG2("DummyAudioSource::read Buffer_offset = %d,"
188 "Buffer_Size = %d, mTimeStampUs = %lld",
189 buffer->range_offset(),buffer->size(),mTimeStampUs);
190 mTimeStampUs = mTimeStampUs + mFrameDurationUs;
191 *out = buffer;
192 return err;
193}
194
195}// namespace android