Merge "Report errors to applications if AudioRecord->start() fails" into honeycomb
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user