am 3f5b2867: Merge change I8f658214 into eclair-mr2

Merge commit '3f5b28679bb31b8ba8f75a2bf330ec0dc0ea14cc' into eclair-mr2-plus-aosp

* commit '3f5b28679bb31b8ba8f75a2bf330ec0dc0ea14cc':
  Minor tweaks to the mp3 and aac software decoders, propagate duration to output format.
This commit is contained in:
Andreas Huber
2009-12-09 15:46:23 -08:00
committed by Android Git Automerger
3 changed files with 19 additions and 8 deletions

View File

@@ -17,7 +17,7 @@ AACDecoder::AACDecoder(const sp<MediaSource> &source)
mBufferGroup(NULL),
mConfig(new tPVMP4AudioDecoderExternal),
mDecoderBuf(NULL),
mLastSeekTimeUs(0),
mAnchorTimeUs(0),
mNumSamplesOutput(0),
mInputBuffer(NULL) {
}
@@ -79,7 +79,7 @@ status_t AACDecoder::start(MetaData *params) {
mSource->start();
mLastSeekTimeUs = 0;
mAnchorTimeUs = 0;
mNumSamplesOutput = 0;
mStarted = true;
@@ -112,13 +112,16 @@ sp<MetaData> AACDecoder::getFormat() {
int32_t numChannels;
int32_t sampleRate;
int64_t durationUs;
CHECK(srcFormat->findInt32(kKeyChannelCount, &numChannels));
CHECK(srcFormat->findInt32(kKeySampleRate, &sampleRate));
CHECK(srcFormat->findInt64(kKeyDuration, &durationUs));
sp<MetaData> meta = new MetaData;
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_RAW);
meta->setInt32(kKeyChannelCount, numChannels);
meta->setInt32(kKeySampleRate, sampleRate);
meta->setInt64(kKeyDuration, durationUs);
return meta;
}
@@ -150,11 +153,13 @@ status_t AACDecoder::read(
return err;
}
if (seekTimeUs >= 0) {
CHECK(mInputBuffer->meta_data()->findInt64(
kKeyTime, &mLastSeekTimeUs));
int64_t timeUs;
if (mInputBuffer->meta_data()->findInt64(kKeyTime, &timeUs)) {
mAnchorTimeUs = timeUs;
mNumSamplesOutput = 0;
} else {
// We must have a new timestamp after seeking.
CHECK(seekTimeUs < 0);
}
}
@@ -189,7 +194,7 @@ status_t AACDecoder::read(
buffer->meta_data()->setInt64(
kKeyTime,
mLastSeekTimeUs
mAnchorTimeUs
+ (mNumSamplesOutput * 1000000) / mConfig->samplingRate);
mNumSamplesOutput += mConfig->frameLength;

View File

@@ -78,13 +78,16 @@ sp<MetaData> MP3Decoder::getFormat() {
int32_t numChannels;
int32_t sampleRate;
int64_t durationUs;
CHECK(srcFormat->findInt32(kKeyChannelCount, &numChannels));
CHECK(srcFormat->findInt32(kKeySampleRate, &sampleRate));
CHECK(srcFormat->findInt64(kKeyDuration, &durationUs));
sp<MetaData> meta = new MetaData;
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_RAW);
meta->setInt32(kKeyChannelCount, numChannels);
meta->setInt32(kKeySampleRate, sampleRate);
meta->setInt64(kKeyDuration, durationUs);
return meta;
}
@@ -120,6 +123,9 @@ status_t MP3Decoder::read(
if (mInputBuffer->meta_data()->findInt64(kKeyTime, &timeUs)) {
mAnchorTimeUs = timeUs;
mNumSamplesOutput = 0;
} else {
// We must have a new timestamp after seeking.
CHECK(seekTimeUs < 0);
}
}

View File

@@ -48,7 +48,7 @@ private:
tPVMP4AudioDecoderExternal *mConfig;
void *mDecoderBuf;
int64_t mLastSeekTimeUs;
int64_t mAnchorTimeUs;
int64_t mNumSamplesOutput;
MediaBuffer *mInputBuffer;