Report errors to applications if AudioRecord->start() fails

bug - 3385198

Change-Id: I86ac8071eb28a538b333e102192193d1b9eda5eb
This commit is contained in:
James Dong
2011-01-25 12:37:43 -08:00
parent f95bd0feb5
commit d7ef5b6feb
3 changed files with 27 additions and 13 deletions

View File

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

View File

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

View File

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