Merge "Report errors to applications if AudioRecord->start() fails" into honeycomb

This commit is contained in:
James Dong
2011-01-25 15:31:09 -08:00
committed by Android (Google) Code Review
3 changed files with 27 additions and 13 deletions

View File

@@ -91,14 +91,17 @@ status_t AudioSource::start(MetaData *params) {
mStartTimeUs = startTimeUs; mStartTimeUs = startTimeUs;
} }
status_t err = mRecord->start(); status_t err = mRecord->start();
if (err == OK) { if (err == OK) {
mGroup = new MediaBufferGroup; mGroup = new MediaBufferGroup;
mGroup->add_buffer(new MediaBuffer(kMaxBufferSize)); mGroup->add_buffer(new MediaBuffer(kMaxBufferSize));
mStarted = true; mStarted = true;
} else {
delete mRecord;
mRecord = NULL;
} }
return err; return err;
} }

View File

@@ -78,6 +78,7 @@ private:
volatile bool mDone; volatile bool mDone;
volatile bool mPaused; volatile bool mPaused;
volatile bool mResumed; volatile bool mResumed;
volatile bool mStarted;
bool mIsAvc; bool mIsAvc;
bool mIsAudio; bool mIsAudio;
bool mIsMPEG4; bool mIsMPEG4;
@@ -951,6 +952,7 @@ MPEG4Writer::Track::Track(
mDone(false), mDone(false),
mPaused(false), mPaused(false),
mResumed(false), mResumed(false),
mStarted(false),
mTrackDurationUs(0), mTrackDurationUs(0),
mEstimatedTrackSizeBytes(0), mEstimatedTrackSizeBytes(0),
mSamplesHaveSameSize(true), mSamplesHaveSameSize(true),
@@ -1279,6 +1281,7 @@ status_t MPEG4Writer::Track::start(MetaData *params) {
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
mDone = false; mDone = false;
mStarted = true;
mTrackDurationUs = 0; mTrackDurationUs = 0;
mReachedEOS = false; mReachedEOS = false;
mEstimatedTrackSizeBytes = 0; mEstimatedTrackSizeBytes = 0;
@@ -1307,10 +1310,14 @@ status_t MPEG4Writer::Track::pause() {
status_t MPEG4Writer::Track::stop() { status_t MPEG4Writer::Track::stop() {
LOGD("Stopping %s track", mIsAudio? "Audio": "Video"); LOGD("Stopping %s track", mIsAudio? "Audio": "Video");
if (!mStarted) {
LOGE("Stop() called but track is not started");
return ERROR_END_OF_STREAM;
}
if (mDone) { if (mDone) {
return OK; return OK;
} }
mDone = true; mDone = true;
void *dummy; void *dummy;

View File

@@ -151,7 +151,11 @@ status_t AACEncoder::start(MetaData *params) {
mInputFrame = new int16_t[mChannels * kNumSamplesPerFrame]; mInputFrame = new int16_t[mChannels * kNumSamplesPerFrame];
CHECK(mInputFrame != NULL); CHECK(mInputFrame != NULL);
mSource->start(params); status_t err = mSource->start(params);
if (err != OK) {
LOGE("AudioSource is not available");
return err;
}
mStarted = true; mStarted = true;
@@ -159,11 +163,6 @@ status_t AACEncoder::start(MetaData *params) {
} }
status_t AACEncoder::stop() { status_t AACEncoder::stop() {
if (!mStarted) {
LOGW("Call stop() when encoder has not started");
return OK;
}
if (mInputBuffer) { if (mInputBuffer) {
mInputBuffer->release(); mInputBuffer->release();
mInputBuffer = NULL; mInputBuffer = NULL;
@@ -172,8 +171,17 @@ status_t AACEncoder::stop() {
delete mBufferGroup; delete mBufferGroup;
mBufferGroup = NULL; mBufferGroup = NULL;
mSource->stop(); if (mInputFrame) {
delete[] mInputFrame;
mInputFrame = NULL;
}
if (!mStarted) {
LOGW("Call stop() when encoder has not started");
return ERROR_END_OF_STREAM;
}
mSource->stop();
if (mEncoderHandle) { if (mEncoderHandle) {
CHECK_EQ(VO_ERR_NONE, mApiHandle->Uninit(mEncoderHandle)); CHECK_EQ(VO_ERR_NONE, mApiHandle->Uninit(mEncoderHandle));
mEncoderHandle = NULL; mEncoderHandle = NULL;
@@ -182,10 +190,6 @@ status_t AACEncoder::stop() {
mApiHandle = NULL; mApiHandle = NULL;
mStarted = false; mStarted = false;
if (mInputFrame) {
delete[] mInputFrame;
mInputFrame = NULL;
}
return OK; return OK;
} }