summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2012-02-04 05:54:53 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-04 05:54:54 -0800
commitf9289a4ca88d8f72cb0d6b3ca16fbc44ef4a2aeb (patch)
tree72b693683dfd6405f6f8f70cdfde38b4b563c4c6
parentf3623993b78669a624d9b3a703b361ed6c035ad9 (diff)
parentb44c9d2bdc0d5b9cb03254022a58e017b516e9e6 (diff)
downloadframeworks_av-f9289a4ca88d8f72cb0d6b3ca16fbc44ef4a2aeb.zip
frameworks_av-f9289a4ca88d8f72cb0d6b3ca16fbc44ef4a2aeb.tar.gz
frameworks_av-f9289a4ca88d8f72cb0d6b3ca16fbc44ef4a2aeb.tar.bz2
Merge "Don't call virtual functions in the destructor for audio and camera source classes"
-rw-r--r--include/media/stagefright/AudioSource.h3
-rw-r--r--include/media/stagefright/CameraSource.h5
-rw-r--r--include/media/stagefright/CameraSourceTimeLapse.h3
-rw-r--r--media/libstagefright/AudioSource.cpp4
-rwxr-xr-xmedia/libstagefright/CameraSource.cpp8
-rw-r--r--media/libstagefright/CameraSourceTimeLapse.cpp13
6 files changed, 15 insertions, 21 deletions
diff --git a/include/media/stagefright/AudioSource.h b/include/media/stagefright/AudioSource.h
index 2427e2f..79437bf 100644
--- a/include/media/stagefright/AudioSource.h
+++ b/include/media/stagefright/AudioSource.h
@@ -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 &);
diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h
index 446720b..5a35358 100644
--- a/include/media/stagefright/CameraSource.h
+++ b/include/media/stagefright/CameraSource.h
@@ -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 &);
diff --git a/include/media/stagefright/CameraSourceTimeLapse.h b/include/media/stagefright/CameraSourceTimeLapse.h
index b060691..0936da2 100644
--- a/include/media/stagefright/CameraSourceTimeLapse.h
+++ b/include/media/stagefright/CameraSourceTimeLapse.h
@@ -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);
diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp
index 8bdb7c5..fef2a00 100644
--- a/media/libstagefright/AudioSource.cpp
+++ b/media/libstagefright/AudioSource.cpp
@@ -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;
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 1850c9c..228659c 100755
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -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;
}
diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp
index 263ab50..83d67b9 100644
--- a/media/libstagefright/CameraSourceTimeLapse.cpp
+++ b/media/libstagefright/CameraSourceTimeLapse.cpp
@@ -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) {