Merge "Don't call virtual functions in the destructor for audio and camera source classes"

This commit is contained in:
James Dong
2012-02-04 05:54:53 -08:00
committed by Android (Google) Code Review
6 changed files with 15 additions and 21 deletions

View File

@@ -40,7 +40,7 @@ struct AudioSource : public MediaSource, public MediaBufferObserver {
status_t initCheck() const;
virtual status_t start(MetaData *params = NULL);
virtual status_t stop();
virtual status_t stop() { return reset(); }
virtual sp<MetaData> getFormat();
// Returns the maximum amplitude since last call.
@@ -97,6 +97,7 @@ private:
void releaseQueuedFrames_l();
void waitOutstandingEncodingFrames_l();
status_t reset();
AudioSource(const AudioSource &);
AudioSource &operator=(const AudioSource &);

View File

@@ -79,7 +79,7 @@ public:
virtual ~CameraSource();
virtual status_t start(MetaData *params = NULL);
virtual status_t stop();
virtual status_t stop() { return reset(); }
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options = NULL);
@@ -163,7 +163,6 @@ protected:
bool storeMetaDataInVideoBuffers);
virtual void startCameraRecording();
virtual void stopCameraRecording();
virtual void releaseRecordingFrame(const sp<IMemory>& frame);
// Returns true if need to skip the current frame.
@@ -220,7 +219,9 @@ private:
status_t checkFrameRate(const CameraParameters& params,
int32_t frameRate);
void stopCameraRecording();
void releaseCamera();
status_t reset();
CameraSource(const CameraSource &);
CameraSource &operator=(const CameraSource &);

View File

@@ -121,9 +121,6 @@ private:
// Wrapper over CameraSource::read() to implement quick stop.
virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL);
// For video camera case, just stops the camera's video recording.
virtual void stopCameraRecording();
// mSkipCurrentFrame is set to true in dataCallbackTimestamp() if the current
// frame needs to be skipped and this function just returns the value of mSkipCurrentFrame.
virtual bool skipCurrentFrame(int64_t timestampUs);

View File

@@ -72,7 +72,7 @@ AudioSource::AudioSource(
AudioSource::~AudioSource() {
if (mStarted) {
stop();
reset();
}
delete mRecord;
@@ -130,7 +130,7 @@ void AudioSource::waitOutstandingEncodingFrames_l() {
}
}
status_t AudioSource::stop() {
status_t AudioSource::reset() {
Mutex::Autolock autoLock(mLock);
if (!mStarted) {
return UNKNOWN_ERROR;

View File

@@ -548,7 +548,7 @@ status_t CameraSource::initWithCameraAccess(
CameraSource::~CameraSource() {
if (mStarted) {
stop();
reset();
} else if (mInitCheck == OK) {
// Camera is initialized but because start() is never called,
// the lock on Camera is never released(). This makes sure
@@ -632,8 +632,8 @@ void CameraSource::releaseCamera() {
mCameraFlags = 0;
}
status_t CameraSource::stop() {
ALOGD("stop: E");
status_t CameraSource::reset() {
ALOGD("reset: E");
Mutex::Autolock autoLock(mLock);
mStarted = false;
mFrameAvailableCondition.signal();
@@ -670,7 +670,7 @@ status_t CameraSource::stop() {
}
CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped);
ALOGD("stop: X");
ALOGD("reset: X");
return OK;
}

View File

@@ -87,6 +87,10 @@ CameraSourceTimeLapse::CameraSourceTimeLapse(
}
CameraSourceTimeLapse::~CameraSourceTimeLapse() {
if (mLastReadBufferCopy) {
mLastReadBufferCopy->release();
mLastReadBufferCopy = NULL;
}
}
void CameraSourceTimeLapse::startQuickReadReturns() {
@@ -204,15 +208,6 @@ status_t CameraSourceTimeLapse::read(
}
}
void CameraSourceTimeLapse::stopCameraRecording() {
ALOGV("stopCameraRecording");
CameraSource::stopCameraRecording();
if (mLastReadBufferCopy) {
mLastReadBufferCopy->release();
mLastReadBufferCopy = NULL;
}
}
sp<IMemory> CameraSourceTimeLapse::createIMemoryCopy(
const sp<IMemory> &source_data) {